10

我正在为智能电视创建一个 JavaScript 应用程序,以在电视上显示仪表板。我使用 JIRA REST API 获取仪表板列表。我用于此的网址是:

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

之后我创建了一个墙板,如下所示在电视上显示它们:

jira/plugins/servlet/Wallboard/?dashboardId=&os_username=&os_password=

由于os_usernameand os_password,JIRA 知道我已通过身份验证并获得正确的列表。这个列表是我从一开始就需要的,但是因为我用参数调用了上面的 url,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。

4

2 回答 2

21

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

  1. 请求方法应该是GET
  2. 您应该有 2 个标题:Authorization Header 和 Content-Type Header。您的 Content-type 标头应如下所示: “Content-Type: application/json”

对于授权标头:

  1. 构建格式为username:password的字符串
  2. Base64编码字符串(使用window.btoa()window.atob()) -你实际上不需要第二个,但我把它放在那里供参考
  3. 提供内容为“Basic”的“Authorization”标头,后跟编码字符串。例如,字符串“fred:fred”在 base64 中编码为“ZnJlZDpmcmVk”,因此您的授权标头应如下所示: “授权:基本 ZnJlZDpmcmVk”

因此,最后您需要使用提供的两个标头发出 GET 请求,并且您应该获得授权。另外请注意 Base64 是可逆转的,而不是加密功能。是编码。请求当然会通过 HTTPS,但如果 SSL 被破坏,Base64 编码的字符串可能会被反转。

于 2013-02-22T11:48:01.787 回答
3

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

如果您是 JIRA 服务器客户,只需转到 JIRA 管理的“白名单”部分并添加您希望从中请求资源的域。

否则,您的请求将以错误结束,因为它违反了浏览器的同源策略 ( http://enable-cors.org/ )。

重要提示:如果您使用 JIRA on demand/云,您将无法使用纯 JavaScript/客户端代码通过基本身份验证成功访问 API。这是出于安全原因,不幸的是,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%

有关如何使用 jQuery执行请求的方法,请参阅 StackOverflow 问题“如何将 Basic Auth 与 jQuery 和 AJAX 一起使用? ”。

安全注意事项:请注意,授权码不是加密值,而是编码。请注意您存储或提供它的位置!

于 2015-11-27T13:04:34.577 回答