2014-02-05 6 views
5

Ich habe Probleme mit Jira REST API Authentifizierung über Kerberos. Die Standardauthentifizierung funktioniert wie erwartet.JIRA REST API und Kerberos Authentifizierung

Wenn ich auf die Login-Seite mit dem Webbrowser zugreifen (nachdem ich kinit) und dann die generierte JSESSIONID in meinem Python-Skript verwenden, kann ich REST ohne 401 verwenden. Aber ich habe keine Idee, wie das mit meinem zu tun Python-Skript, ich habe versucht, Anfragen_Kerberos zu verwenden, aber wenn ich die Anmeldeseite anfordern, gibt es einfach das grundlegende Login-Formular anstelle der automatischen Anmeldung zurück.

Wissen Sie, wie Sie JIRA REST API mit Kerberos-Authentifizierung verwenden?

Danke für Ihre Antworten.

Antwort

5

Nach einem Tag des Kampfes habe ich es endlich herausgefunden.

Zuerst müssen Sie eine HTTP-GET-Anforderung an ${jira-url}/step-auth-gss senden:

r = requests.get("https://example-jira.com/step-auth-gss", auth=requests_kerberos.HTTPKerberosAuth()) 

Dann Sie die JSESSIONID aus dem Cookie-Header und Sie können entfernt REST:

rd = requests.get(url, headers={"Cookie": "JSESSIONID=%s" % r.cookies['JSESSIONID']}) 
+1

Was JIRA Kerberos-Plugin verwenden Sie dafür? Oder sollte das out-of-the-box funktionieren? – Xabs

+0

Ich bekomme 404, wenn ich auf meinem Jira set-auth-gss gehe. Muss ich irgendetwas aktivieren, damit diese URL funktioniert? –

+0

Auf meine eigene Frage antworten: das funktioniert nicht out-of-the-box, ich benutze [Cleito Kerberos plugin] (https://www.cleito.com/products/iwaac/documentation/) mit allen meine Tomcat basiert Produkte. Ich habe es mit Powershell arbeiten lassen, aber ich versuche immer noch, es vollständig von Python zu bekommen. – Xabs

1

Wie VaclavDedik erklärt, Der erste Schritt ist ein gültiger JSESSIONID Cookie (zusammen mit atlassian.xsrf.token und crowd.token_key cooki Wenn Sie bei der erfolgreichen Kerberos-Authentifizierung für eine private Jira-Ressource/URL Crowd für Benutzerverwaltung und SSO verwenden.

In Python erleichtert das PycURL-Paket die Authentifizierung mit Kerberos. Sie können es unter Windows/Mac OS/Linux entweder mit easy_install oder pip installieren. Das PycURL-Paket basiert auf libcurl. Sie müssen überprüfen, ob Ihre libcurl Version> = 7.38.0 ist, da die HTTPAUTH_NEGOTIATE-Direktive in dieser Version eingeführt wurde.

Dann ist es so einfach wie:

import pycurl 

curl = pycurl.Curl() 

# GET JSESSIONID 
curl.setopt(pycurl.COOKIEFILE, "") 
curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_NEGOTIATE) 
curl.setopt(pycurl.USERPWD, ':') 
curl.setopt(pycurl.URL, <ANY_JIRA_PRIVATE_URL>) 
curl.perform() 

# Then REST request 
curl.setopt(pycurl.URL, <YOUR_JIRA_REST_URL>) 
curl.perform() 

curl.close() 

Bitte überprüfen Sie die folgende Seite für detaillierte Beispiele in Python, Powershell und Groovy: https://www.cleito.com/products/iwaac/documentation/integrated-windows-authentication-for-non-browser-clients/

Obwohl dies die offizielle Dokumentation des Kleito ist IWAAC-Plugin von Xabs erwähnt, wird dies mit jedem serverseitigen Kerberos-Plugin für Jira