2016-11-15 63 views
1

我試圖創建一個命令行客戶端吉拉,但我真的不希望存儲的用戶名/密碼,我不希望有把我的密碼,與每一個請求。是否可以使用基於Jira Cookie的單獨連接的身份驗證?

Jira 他們有cookie based API,但它看起來不像我認爲它的工作方式。

具體來說,使用Python的requests庫時,我只能如果我有一個Session對象,我覺得保持吉拉來連接重新使用cookie。

但是,如果我試着說,請求請求和requests.get請求到REST URL,它會失敗,並告訴我,我沒有通過身份驗證。 OTOH,如果我創建一個Session,我可以做

session.post(.../rest/auth/1/session) 
print(session.get(.../rest/auth/1/session).status_code) 

我會得到我預期的200。

我也注意到,有一個在請求其他Cookie響應頭:

atlassian.xsrf.token=SOMETHING|RANDOM|lout 

,但我沒有看到有關的文檔中任何事情。

是否有可能,如果我想打破的請求之間的連接要做到這一點,或者我必須存儲的用戶名/密碼?

回答

0

你是對的,會話是必需的。從文檔:

  1. 客戶端爲用戶創建一個新的會話,通過JIRA REST API。
  2. JIRA返回會話對象,它具有關於包括的會話cookie的會話信息。客戶端存儲這個會話對象。
  3. 客戶端現在可以設置在標題中的cookie的所有後續請求的JIRA REST API。

換句話說,會話是不可或缺的要求,接收和使用基於Cookie的身份驗證令牌。

此外,atlassian.xsrf.token本來會被atlassian注入,以防止cross-site forgery和劫持session/cookie。

我看到它的方式,這是你簡單但安全的選擇:

  1. 您的腳本的每次調用,使用session請求,接收,保持餅乾(然後,一旦所有API調用是完整的,讓一切都被丟棄)
  2. 的Base64編碼您的用戶名和密碼,將其存儲在一個單獨的文件(如果你選擇加密的),並讓您的腳本收集(和解密)它,然後把它放在一個authorization header 。請參閱Hiding a password in a python script (insecure obfuscation only)
0

如果按照目標不授權每次發送請求API的時候,你應該將使用基於Cookie的身份驗證/rest/auth/1/session,而不是基本認證,獲得令牌(POST)的認證請求。然後,您將在您的其他請求(Cookie頭中)中隨後使用獲取的令牌給API,而無需授權每個請求。

注意API文檔中重要的缺失部分:您應該發送用戶名,而不是電子郵件,以基於cookie的方式進行授權。即使兩種變體都適用於基本身份驗證,但只有用戶才能使用基於cookie的身份驗證。

相關問題