JIRA REST API 调用在通过 URLFETCH 使用 JSESSIONID COOKIE 身份验证时失败



我有一个与JIRA Cloud实例交互的Google App Engine Python应用程序。

到目前为止,该应用程序使用基本身份验证对 JIRA 进行了 urlfetch 次调用,但由于它现在在 POST 和 GET 上进行了数十次单独的 REST 调用,我希望使用 cookie 身份验证可以在一定程度上减少延迟。

工作的基本身份验证代码示例:

result = urlfetch.fetch(jira_url,
                        deadline=60,
                        headers={"Authorization": "Basic %s" %
                        base64.b64encode("%s:%s" % (username, password))
                        })

和饼干替代品:

result = urlfetch.fetch(jira_url,
                        deadline=60,
                        headers={"X-Atlassian-Token": "no-check", 
                        "Cookie": "JSESSIONID=529…snip…C4C"
                        })

我使用说明成功检索了 JSESSIONID,但 cookie 查询只会返回"401 - Unauthorized" error while loading this page.错误,就好像 cookie 已过期一样。

{
  "errorMessages" : [
    "You do not have the permission to see the specified issue.",
    "Login Required"
  ],
  "errors" : {}
}

我正在从Memcache召回cookie,因为大多数交互都是从任务队列进行的,并且必然是一个单独的线程,但是cookie是在召回之前立即生成的。

cookie 未过期。问题的原因是 JSESSIONID 不是成功验证后续请求所需的唯一 cookie。

我遇到了同样的问题,并通过重新发送我在创建会话时从服务器获得的所有 cookie 来解决它。就我而言(JIRA 服务器托管在 Atlassian Cloud),这些必需的 cookie 是:atlassian.xsrf.token 和 studio.crowd.tokenkey。

我在这里发布了一篇详细的文章:JIRA REST API:Cookie-based Authentication。代码示例是 C# 格式的,但总体思路应该很清楚。

最新更新