如何在JavaScript中使用JIRA REST API进行基本身份验证?

时间:2013-02-21 15:59:14

标签: javascript authentication curl jira basic-authentication

我正在为智能电视创建一个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调用上面的url,它确实得到了正确的列表

但是在启动电视时/第一次使用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。

2 个答案:

答案 0 :(得分:20)

我认为你从here得到了这个。在同一页面上,它解释了如何“自己动手”。我将“翻译”您需要执行的步骤,以便设法在JS中执行相同的请求。

  1. 请求方法应为 GET
  2. 您应该有2个标题:Authorization Header and Content-Type Header。 您的Content-type标头应如下所示: “内容类型:application / json”
  3. 对于Authorization标题:

    1. 构建用户名:密码
    2. 形式的字符串
    3. Base64对字符串进行编码(使用window.btoa()window.atob()) - 您实际上不需要第二个但我把它放在那里供参考
    4. 提供“授权”标题,内容为“基本”,后跟编码字符串。例如,字符串“fred:fred”在base64中编码为“ZnJlZDpmcmVk”,因此您的授权标题应该看起来像“: “授权:基本ZnJlZDpmcmVk”
    5. 所以最后你需要使用提供的两个Header来提出你的GET请求,你应该被授权。另外 BEWARE Base64是可反转的而不是加密功能。它是编码。当然,请求将通过HTTPS,但如果SSL中断,Base64编码的字符串可能会被反转。

答案 1 :(得分:3)

如果您拥有自己的JIRA实例,则应将您的网站列入白名单,以便首先为您的域启用CORS:

  

如果您是JIRA Server客户,只需转到"白名单" 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%

  4. 请参阅StackOverflow问题" How to use Basic Auth with jQuery and AJAX?"有关如何使用jQuery执行请求的方法。

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