我正在尝试为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
但我在文档中没有看到任何相关内容。
是否可以这样做,或者如果我想在请求之间断开连接,我是否必须存储用户名/密码?
答案 0 :(得分:0)
你是对的,会话是必需的。来自文档:
- 客户端通过JIRA REST API为用户创建新会话。
- JIRA返回一个会话对象,该对象包含有关会话的信息,包括会话cookie。客户端存储此会话对象。
- 客户端现在可以在标头中为JIRA REST API的所有后续请求设置cookie。
醇>
换句话说,会话是请求,接收和使用基于cookie的身份验证令牌不可或缺的。
此外,atlassian会注入atlassian.xsrf.token
以防止cross-site forgery和劫持会话/ cookie。
我看到它的方式,这是你简单但安全的选择:
答案 1 :(得分:0)
如果您每次向API发送请求时都遵循不授权的目标,则应使用基于cookie的身份验证/rest/auth/1/session
(而非基本身份验证)发送(POST)身份验证请求以获取令牌。然后,您将在API的进一步请求(在Cookie标头中)中随后使用该获取的令牌,而无需对每个请求进行授权。
注意API文档中重要的缺失部分:您应该发送用户名,而不是电子邮件,以基于cookie的方式进行授权。尽管两种变体都适用于Basic Auth,但只有用户才能使用基于cookie的身份验证。