是否可以使用基于Jira cookie的auth与单独的连接?

时间:2016-11-15 23:17:33

标签: python rest authentication cookies jira

我正在尝试为Jira创建一个命令行客户端,但我真的不想存储用户名/密码,而且我不想在每次请求时都输入密码。

Jira 他们有一个cookie based API,但它看起来并不像我认为的那样有效。

具体来说,当使用Python的months[(int) myRainFall.getRainLowest() - 1] 库时,我只能重新使用cookie,如果我有一个{<1}}对象我认为保持与Jira的连接。

但是,如果我试着说,向REST URL发出requests请求和Session请求,则会失败并显示401并告诉我我没有通过身份验证。 OTOH,如果我创建requests.post,我可以做

requests.get

我会得到我期望的200。

我注意到请求响应标头中还有另一个cookie:

Session

但我在文档中没有看到任何相关内容。

是否可以这样做,或者如果我想在请求之间断开连接,我是否必须存储用户名/密码?

2 个答案:

答案 0 :(得分:0)

你是对的,会话是必需的。来自文档:

  
      
  1. 客户端通过JIRA REST API为用户创建新会话。
  2.   
  3. JIRA返回一个会话对象,该对象包含有关会话的信息,包括会话cookie。客户端存储此会话对象。
  4.   
  5. 客户端现在可以在标头中为JIRA REST API的所有后续请求设置cookie。
  6.   

换句话说,会话是请求,接收和使用基于cookie的身份验证令牌不可或缺的。

此外,atlassian会注入atlassian.xsrf.token以防止cross-site forgery和劫持会话/ cookie。

我看到它的方式,这是你简单但安全的选择:

  1. 对于脚本的每次调用,使用会话来请求 - 接收 - 保留cookie(然后,一旦所有API调用完成,就让所有内容都被丢弃)
  2. Base64对您的用户名和密码进行编码,将其存储在单独的文件中(如果您愿意,则加密),然后让您的脚本收集(并解密),然后将其放在authorization header中。见Hiding a password in a python script (insecure obfuscation only)

答案 1 :(得分:0)

如果您每次向API发送请求时都遵循不授权的目标,则应使用基于cookie的身份验证/rest/auth/1/session(而非基本身份验证)发送(POST)身份验证请求以获取令牌。然后,您将在API的进一步请求(在Cookie标头中)中随后使用该获取的令牌,而无需对每个请求进行授权。

注意API文档中重要的缺失部分:您应该发送用户名,而不是电子邮件,以基于cookie的方式进行授权。尽管两种变体都适用于Basic Auth,但只有用户才能使用基于cookie的身份验证。