2013-02-21 105 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请求。

安全通知:请注意,授权码不是加密值,而是编码。保管你存放或提供的地方!