2013-02-21 3 views
6

Ich erstelle eine JavaScript-App für einen Smart TV, um Dashboards auf dem Fernseher anzuzeigen. Ich bekomme die Liste der Dashboards mit der JIRA REST API. Die URL ich für diesen Einsatz ist:Wie wird die Standardauthentifizierung mit JIRA REST API in JavaScript verwendet?

jira/rest/api/2/dashboard?startAt=&maxResults= 

danach ich eine Wandplatte erstellen, wie folgt ihnen auf dem Fernseher zu zeigen:

jira/plugins/servlet/Wallboard/?dashboardId=&os_username=&os_password= 

wegen der os_username und os_password, weiß JIRA ich bin authentifiziert und bekommt die richtige Liste. diese Liste ist der, den ich von Anfang an müssen, sondern weil ich die URL oben mit den Parametern os_username und os_password Anruf genügt die richtige Liste aus dem tv

aber beim Start erhalten/das erste Mal, dass ich die Liste der Dashboards erhalten Bei JIRA gibt es niemanden, der authentifiziert wird, also braucht er eine zufällige Liste, nicht die, die ich bekommen muss.

es gibt einen Weg in JIRA mit dem Befehl unten zu authentifizieren:

curl -D- -u fred:fred -X GET -H "Content-Type: application/json"   http://example.com/rest/api/2/issue/createmeta 

, aber ich weiß nicht, wie das Kommando in JavaScript zu verwenden.

So kann mir jemand sagen, wie ich in JIRA mit Basisauthentifizierung authentifizieren kann und sehr wichtig, dass es JAVASCRIPT sein muss.

Antwort

17

Sie haben dies von here, nehme ich an. Auf der gleichen Seite wird erklärt, wie man es selbst macht. Ich werde die Schritte übersetzen, die Sie ausführen müssen, um die gleiche Anfrage in JS zu erledigen.

  1. anfordern Methode sollte GET
  2. Sie sollten 2 Header haben: Authorization Header and Content-Type Header. Ihre Content-type-Header sollte wie folgt aussieht: "Content-Type: application/json"

Für den Authorization-Header:

  1. eine Zeichenfolge des Benutzernamens Form Körperbau: Passwort
  2. Base64 codieren Sie die Zeichenfolge (Verwenden Sie window.btoa() und window.atob()) - Sie brauchen eigentlich nicht die zweite, aber ich habe es dort als Referenz
  3. Geben Sie einen Header "Authorization" mit dem Inhalt "Basic" gefolgt von der codierten Zeichenfolge ein. Zum Beispiel kann die Zeichenfolge: kodiert "fred fred" auf "ZnJlZDpmcmVk" in Base64, so sollte Ihr Authorization-Header aussehen ": "Authorization: Grund ZnJlZDpmcmVk"

Also am Ende müssen Sie sicherstellen, Ihre GET-Anfrage mit den beiden Kopfzeilen geliefert und Sie sollten autorisiert sein .. Auch BEWARE Base64 ist umkehrbar und keine Verschlüsselungsfunktion.Es ist Codierung.Die Anforderung wird natürlich über HTTPS gehen, aber die Base64-codierte Zeichenfolge könnte umgekehrt werden, wenn SSL ist kaputt.

+0

Request-Methode sollte wahrscheinlich erhalten werden, weil JIRA keine Unterstützung für Put oder Post-Methoden hat? –

+0

Haben Sie versucht, was Sie hier vorgeschlagen haben? Es scheint für mich nicht zu funktionieren. Bitte werfen Sie einen Blick auf http://stackoverflow.com/questions/20812158/jira-rest-client-in-javascript-giving-syntax-while-using-jsonp –

+0

Ja, ich habe und es funktioniert gut. –

2

Falls Sie Ihre eigene JIRA-Instanz haben, sollten Sie Ihre Website weiße Liste zu CORS für Ihre Domain aktivieren zuerst:

Wenn Sie ein JIRA Server-Kunde sind, gehen Sie einfach auf die „Weiße Liste“ in JIRA Administration und fügen Sie die Domains hinzu, von denen Sie Ressourcen anfordern möchten.

Andernfalls würde Ihre Anfrage mit einem Fehler enden, da sie die Richtlinie für denselben Ursprung des Browsers verletzt (http://enable-cors.org/).

Wichtig: Wenn Sie JIRA on demand/cloud verwenden, können Sie mit der Standardauthentifizierung mit reinem JavaScript/clientseitigem Code nicht erfolgreich auf die API zugreifen. Das liegt an security reasons, und leider scheint es noch keine Lösung vom Atlassian-Team zu geben. Eine Lösung, um das zu lösen, könnte sein, einen Proxy auf Ihrem Server einzurichten, der Ihre JavaScript-Anfragen vom Browser an die tatsächliche JIRA-Instanz weiterleitet.

Um mögliche Probleme aufgrund von Fehlern im Code zu vermeiden, schlage ich vor, sehr Zugriff auf den JIRA-API, um zu versuchen, indem CURL als ersten Schritt unter Verwendung von:

curl -D- -X GET -H "Authorization: Basic %BASE64-CREDENTIDALS%" -H "Content-Type: application/json" "https://webjets.atlassian.net/rest/api/2/issue/WJ-333" 

Beachten Sie, dass% ersetzen base64 CREDENTIDALS% mit Ihrem tatsächlichen Base64-codierten Benutzer/Passwort-Paar. Es ist wichtig zu wissen, dass dies nur mit dem JIRA-Benutzernamen und nicht mit der JIRA-Benutzer-E-Mail-Adresse funktioniert. Dies kann verwirrend sein, da Sie sich normalerweise auch bei JIRA mit der E-Mail-Adresse anmelden können, aber nicht mit der API arbeiten.

Nachdem weißen Liste Ihrer Domain sind Sie bereit zu gehen - ein GET Anfrage mit folgenden Details bauen:

  1. einen Inhaltstyp-Header hinzufügen: Content-Type: application/json
  2. einen grundlegenden Authentifizierungsheader hinzufügen von erster Base64 Codierung Benutzername und Passwort:

    var authCode = window.btoa(user + ":" + password); var authHeader = "Authorization: Basic " + authCode;

  3. Führen Sie die Anforderung auf einem Endpunkt URL JIRA-API, wie:

    https://%PROJECT%.atlassian.net/rest/api/2/issue/%ISSUE-ID%

Siehe Frage Stackoverflow "How to use Basic Auth with jQuery and AJAX?" für Ansätze, wie die Anfrage mit jQuery auszuführen.

Sicherheitshinweis: Beachten Sie, dass der Autorisierungscode kein verschlüsselter Wert ist, sondern eine Codierung. Achten Sie darauf, wo Sie es lagern oder bereitstellen!

Verwandte Themen