2017-05-05 81 views
1

我已经迁移从5.4我的声纳版本6.3.1 。 在5.4版本中,没有Sonar提供的登录API。 因此,我们在每次调用时都添加一个授权标头,其值为Base64编码的“用户名”:“密码”。授权声纳REST /网络API

但是,在迁移到6.3.1后,授权将失败,并且当前实施。

我们尝试传递令牌(从UI生成)作为授权标头的值,但徒劳无益。

我们也尝试调用Sonar登录API(api/authentication/login),但它没有回复任何响应。

请帮助我们解决此问题。

谢谢。

编辑

以下是调用REST web服务的代码:

byte[] encodedUsernamePassword = Base64.getEncoder().encode("adminUserName:adminPassword".getBytes()); 

ResteasyClient client = new ResteasyClientBuilder().build(); 
    String target = "http://IP:Port/api/issues/search/?statuses=" + "CLOSED" + "&assignees=" + username + "&resolutions=" + "FIXED" + "&createdBefore=" + end_date + "&createdAfter=" + start_date + "&facetMode=debt"; 

javax.ws.rs.core.Response response = client.target(target).request(MediaType.APPLICATION_JSON).header("Authorization", new String(encodedUsernamePassword)).get(); 

String strResponse = response.readEntity(String.class); 
+0

你应该举例说明你试过的东西。建议先使用_curl_这样的简单工具。确保[将密码作为用户名使用空密码传递](https://docs.sonarqube.org/display/DEV/Web+API#WebAPI-UserToken)。 –

+0

你好,我尝试了下面的登录API,我得到HTTP 200作为响应,显示登录成功。 –

+0

但是在调用登录API后,如果我调用任何其他API而没有传递任何授权标头,那么它不会给我任何回应。如果我复制相同的URI并从浏览器中调用它(登录后),那么它会给我适当的响应数据。 –

回答

1

第一件事:API /认证/注册的是,这里没有帮助。根据Web API documentation,通过HTTP基本认证进行Web API认证。

因此,只需在每个Web API请求的标头中传递用户名/密码即可。如果你使用用户令牌,按same documentation

这是推荐的方式。益处在页面User Token中描述。 令牌通过HTTP基本认证的登录字段发送,没有任何密码

+0

你好,我编辑了我的问题,包括我用来调用Sonar web服务的代码。此代码正在调用Sonar v5.3 REST API,但目前无法正常工作。 –

+0

如果我遵循你的建议使用任何其他工具,如邮递员然后该API工作正常,但它不工作,如果我使用JAVA REST客户端。请帮助解决此问题。谢谢。 –

1

两个变化在上面的代码中作出:

  1. 新增“基本”前缀授权报头的值,如下所示:

    标题(“授权”,新的字符串(“基本YWRtaW46YWRtaW4zMjW =“))

  2. 移除额外 '/' 之前,从下面的网址,如下所示 '?':

    http://IP:Port/api/issues/search/?statuses