2017-05-05 80 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