2016-02-25 7 views
0

У меня есть приложение Python для приложения Google App, которое взаимодействует с экземпляром JIRA Cloud.JIRA REST API вызывает ошибки при использовании аутентификации JSESSIONID cookie с использованием urlfetch

На сегодняшний день приложение вызывает urlfetch звонки в JIRA с использованием базовой аутентификации, но поскольку сейчас он делает десятки отдельных вызовов REST, как POST, так и GET, я надеялся, что использование аутентификации cookie несколько уменьшит задержку.

пример кода Basic-аутентификации, который работает:

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 успешно используя инструкции, но запрос печенье будет возвращать только "401 - Unauthorized" error while loading this page. ошибки, если cookie истек.

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

Я вспоминаю печенье с Memcache, поскольку большинство взаимодействий сделаны из очереди задач и обязательно отдельный поток, но печенье сразу же генерируется до вызова.

ответ

3

Печенье не истекло. Причиной проблемы является то, что JSESSIONID не является единственным файлом cookie, который необходим для успешной аутентификации последующих запросов.

Я столкнулся с той же проблемой и решил ее, отправив все файлы cookie, которые я получил с сервера при создании сеанса. В моем случае (сервер JIRA размещен в Atlassian Cloud) эти необходимые файлы cookie: atlassian.xsrf.token и studio.crowd.tokenkey.

Я разместил детальную статью об этом здесь: JIRA REST API: Cookie-based Authentication. Пример кода находится на C#, но общая идея должна быть ясной.