2013-02-21 40 views
6

我正在爲智能電視創建一個JavaScript應用程序,以在電視上顯示儀表板。 我使用JIRA REST API獲取儀表板的列表。我使用這個網址是:如何在JavaScript中使用基本認證和JIRA REST API?

jira/rest/api/2/dashboard?startAt=&maxResults= 

後來我創建了一個牆板爲遵循它們顯示在電視:

jira/plugins/servlet/Wallboard/?dashboardId=&os_username=&os_password= 
因爲 os_usernameos_password

,JIRA知道我身份驗證,得到正確的列表。這個名單是一個我從一開始就需要,而是因爲我與參數os_usernameos_password撥打上面的網址,卻沒有得到正確的列表

而是開始了電視/我第一次拿到儀表板的列表與JIRA沒有一個認證,所以它需要一個隨機列表,而不是我需要得到的。

有一些方法在JIRA與下面的命令來驗證:

curl -D- -u fred:fred -X GET -H "Content-Type: application/json"   http://example.com/rest/api/2/issue/createmeta 

,但我不知道如何在JavaScript中使用該命令。

那麼,誰能告訴我如何我可以在基本認證和非常重要的JIRA身份驗證JAVASCRIPT。

回答

17

你從here得到了這個,我想。那麼在相同的頁面上,解釋瞭如何「自己動手」。我將「翻譯」您需要執行的步驟,以便在JS中執行相同的請求。

  1. 請求方法應是GET
  2. 你應該有2頭:Authorization Header and Content-Type Header。 您的Content-type頭應該是這樣的: 「內容類型:應用程序/ JSON」

對於Authorization頭:

  1. 構建形式用戶名的字符串:密碼
  2. Base64編碼字符串(使用window.btoa()window.atob()) - 你其實不需要第二個,但我把它放在那裏作爲參考
  3. 提供內容爲「Basic」的「Authorization」標頭,後面跟着編碼字符串。例如,字符串「弗雷德:弗雷德」編碼爲「ZnJlZDpmcmVk」用base64,所以你的授權頭應該像「: ‘授權:基本ZnJlZDpmcmVk’

所以你需要做到底您的GET請求提供了兩個頭文件,並且您應該被授權。還有請注意Base64是可逆的而不是一個加密函數它是編碼請求將通過HTTPS當然,但是Base64編碼的字符串可以顛倒如果SSL被打破。

+0

請求方法應該可能是因爲JIRA不支持put或post方法? – 2013-12-28 05:16:15

+0

你有沒有試過你在這裏建議的。這似乎不適合我。請看看http://stackoverflow.com/questions/20812158/jira-rest-client-in-javascript-giving-syntax-while-using-jsonp – 2013-12-28 08:11:39

+0

是的,我有,它工作正常。 – 2014-01-21 15:45:04

2

在你有你自己的JIRA情況下,你應該列入白名單,你的網站,使您的域名第一CORS情況:

如果你是一個JIRA服務器的客戶,只需轉至JIRA的「白名單」部分管理並添加您希望從中請求資源的域。

否則您的請求將以錯誤結束,因爲它違反了瀏覽器的同源策略(http://enable-cors.org/)。

重要:如果您使用JIRA on demand/cloud,您將無法使用純JavaScript /客戶端代碼使用基本身份驗證成功訪問API。這是由於security reasons,不幸的是,似乎還沒有Atlassian團隊提供的解決方案。解決這個問題的一個解決方案可能是在您的服務器上設置一個代理,該服務器將來自瀏覽器的JavaScript請求轉發給實際的JIRA實例。

爲了避免任何可能出現的問題是由於代碼中的錯誤,我強烈建議通過使用curl作爲第一步,試圖訪問JIRA API:

curl -D- -X GET -H "Authorization: Basic %BASE64-CREDENTIDALS%" -H "Content-Type: application/json" "https://webjets.atlassian.net/rest/api/2/issue/WJ-333" 

請注意,您必須更換%BASE64- CREDENTIDALS%與您的實際Base64編碼的用戶/密碼對。重要的是要知道,這隻適用於JIRA用戶名,而不適用於JIRA用戶的電子郵件地址。這可能會讓您感到困惑,因爲通常您也可以使用電子郵件地址在JIRA中登錄,但不適用於API。

有白名單域名後,你準備好了 - 建立一個GET要求符合以下細節:

  1. 添加內容類型標題:Content-Type: application/json
  2. 通過添加一個基本的身份驗證標頭第一的Base64編碼用戶名和密碼:

    var authCode = window.btoa(user + ":" + password); var authHeader = "Authorization: Basic " + authCode;

  3. 上的JIRA API端點URL執行要求,如:

    https://%PROJECT%.atlassian.net/rest/api/2/issue/%ISSUE-ID%

見的StackOverflow問題 「How to use Basic Auth with jQuery and AJAX?」 的方法如何執行使用jQuery請求。

安全通知:請注意,授權碼不是加密值,而是編碼。保管你存放或提供的地方!