2013-02-21 11 views
6

Tworzę aplikację JavaScript dla Smart TV, aby wyświetlać pulpity w telewizorze. Otrzymuję listę pulpitów z interfejsem JIRA REST API. Url używam tego jest:Jak korzystać z podstawowego uwierzytelniania z JIRA REST API w JavaScript?

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

potem tworzę Wallboard jak następuje, aby wyświetlić je na telewizorze:

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

powodu os_username i os_password, JIRA wie, że jestem i uwierzytelnionego dostaje właściwą listę. ta lista jest potrzebna od początku, ale ponieważ zadzwonię pod powyższy URL o parametrach os_username i os_password, uzyskuje ona odpowiednią listę

, ale po uruchomieniu telewizora/po raz pierwszy pojawia się lista pulpitów z JIRA nikt nie jest uwierzytelniony, więc zajmuje losową listę, nie tę, którą muszę zdobyć.

istnieje jakiś sposób, aby uwierzytelnić w JIRA z poniższej komendy:

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

ale nie wiem, jak korzystać z tego polecenia w JavaScript.

Czy ktoś może mi powiedzieć, w jaki sposób mogę uwierzytelnić się w JIRA z podstawowym uwierzytelnianiem i bardzo ważnym IT JAVASCRIPT.

Odpowiedz

17

Dostałeś to od here, jak mniemam. Na tej samej stronie wyjaśniono, jak "zrobić to sam". Będę "tłumaczyć" kroki, które musisz wykonać, aby móc wykonać to samo żądanie w JS.

  1. Zapytanie metoda powinna być GET
  2. Trzeba 2 nagłówki: Authorization Header and Content-Type Header. nagłówka Content-type powinien wyglądać tak: "Content-Type: application/json"

dla nagłówka Authorization:

  1. zbudować ciąg formularza nazwa użytkownika: hasło
  2. zakodować ciąg (Użyj window.btoa() i window.atob()) - W rzeczywistości NIE potrzebujesz drugiego, ale umieściłem go tam dla odniesienia
  3. Podaje nagłówek "Authorization" z treścią "Basic", po której następuje zakodowany ciąg. Na przykład ciąg „Fred: fred” koduje do „ZnJlZDpmcmVk” w base64, więc autoryzację Nagłówek powinien wyglądać ": «Authorization: Podstawowe ZnJlZDpmcmVk»

Więc w końcu trzeba zrobić Twoje żądanie GET z dwoma nagłówkami dostarczonymi i powinieneś być autoryzowanym również BEWARE Base64 jest odwracalny, a NIE funkcja szyfrowania.Jest to kodowanie.Zapytanie przejdzie oczywiście przez HTTPS, ale kodowany kod Base64 może zostać odwrócony, jeśli SSL Jest zepsuty.

+0

Metoda żądania powinna być dostępna prawdopodobnie dlatego, że JIRA nie obsługuje metod wprowadzania lub publikowania? –

+0

Czy próbowałeś tego, co sugerujesz tutaj? Wydaje się, że nie działa dla mnie. Proszę spojrzeć na http://stackoverflow.com/questions/20812158/jira-rest-client-in-javascript-giving-syntax-while-using-jsonp –

+0

Tak, mam i działa dobrze. –

2

W przypadku, gdy posiadanie własnego instancji JIRA należy białej listy swoją stronę, aby umożliwić CORS dla pierwszej domeny:

Jeśli jesteś klientem JIRA Server, wystarczy przejść do sekcji „Biała lista” z JIRA Administrowanie i dodawanie domen, z których chcesz pobierać zasoby.

W przeciwnym razie Twoje żądanie zakończyłoby się błędem, ponieważ narusza zasady dotyczące tego samego pochodzenia przeglądarki (http://enable-cors.org/).

Ważne: Jeśli używasz JIRA na żądanie/chmurze, nie będzie w stanie skutecznie korzystać z interfejsu API z uwierzytelnianiem podstawowym przy użyciu czystego kodu JavaScript/po stronie klienta. Wynika to z security reasons i niestety, wydaje się, że zespół Atlassian jeszcze nie opracował rozwiązania. Rozwiązaniem tego problemu może być skonfigurowanie serwera proxy, który przekazuje żądania JavaScript z przeglądarki do rzeczywistej instancji JIRA.

Aby uniknąć ewentualnych problemów z powodu błędów w kodzie, bardzo proponuję spróbować dostęp do API JIRA za pomocą CURL jako pierwszy krok:

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

Zauważ, że musisz wymienić% BASE64- CREDENTIDALS% z rzeczywistą parą użytkownika/hasła zakodowanych w Base64. Ważne jest, aby wiedzieć, że działa to tylko z nazwą użytkownika JIRA, a nie z adresem e-mail użytkowników JIRA. Może to być mylące, ponieważ zwykle możesz zalogować się w JIRA przy użyciu adresu e-mail, ale nie będzie działać z interfejsem API.

Po białej liście domenę jesteś gotowy, aby przejść - zbudować GET wniosek z następującymi szczegółami:

  1. dodać nagłówek rodzaj zawartości: Content-Type: application/json
  2. dodać podstawowego nagłówka uwierzytelniania przez pierwszy kodowania Base64 nazwę użytkownika i hasło:

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

  3. Wykonaj żądanie na adres URL punktu końcowego JIRA API, takich jak:

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

See StackOverflow pytanie "How to use Basic Auth with jQuery and AJAX?" dla podejść jak wykonać żądanie przy użyciu jQuery.

Informacja o zabezpieczeniach: Należy pamiętać, że kod autoryzacji nie jest wartością zakodowaną, ale kodowaniem. Zachowaj ostrożność podczas przechowywania lub dostarczania!

Powiązane problemy