3

我已将我的 Sonar 版本从5.4迁移6.3.1。在 5.4 版本中,Sonar 没有提供登录 API。因此,我们在每个调用中添加了一个 Authorization 标头,其值为 Base64 编码的“用户名”:“密码”。

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

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

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

请帮助我们解决这个问题。

谢谢。

编辑

以下是调用 REST Webservice 的代码:

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);
4

2 回答 2

2

第一件事:api/authentication/login在这里没有帮助。根据Web API 文档,Web API 身份验证是通过 HTTP 基本身份验证进行的。

因此,只需在每个 Web API 请求的标头中传递用户名/密码。如果您使用用户令牌,根据相同的文档

这是推荐的方式。好处在页面User Token中描述。Token 通过 HTTP 基本认证的 login 字段发送,无需任何密码

于 2017-05-05T08:10:52.677 回答
1

上面的代码做了两处改动:

  1. 为 Authorization 标头的值添加了“基本”前缀,如下所示:

    header("授权", new String("Basic YWRtaW46YWRtaW4zMjW="))

  2. 从下面的 URL 中删除了 '?' 之前的多余 '/',如下所示:

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

于 2017-05-08T11:39:44.433 回答