Wysyłanie tokena JWT w nagłówkach za pomocą programu Postman


169

Testuję implementację zabezpieczeń opartych na tokenach JWT na podstawie poniższego artykułu . Pomyślnie otrzymałem token z serwera testowego. Nie mogę dowiedzieć się, w jaki sposób program Chrome POSTMAN REST Client wysłał token w nagłówku.

zrzut ekranu listonosza

Moje pytania są następujące:

1) Czy używam właściwej nazwy nagłówka i / lub interfejsu POSTMAN?

2) Czy muszę kodować token base 64? Pomyślałem, że mogę po prostu odesłać token.


Cześć, gdzie mogę zobaczyć w POSTMAN token jwt, który otrzymałem?
Usr

1
@MLondei, zależy to od sposobu skonfigurowania serwera odbierającego. Może powrócić jako adres URL (znajdź go w ciągu adresu URL) lub może wrócić w treści odpowiedzi (znajdź go w polu treści odpowiedzi). Są to dwa główne, które znam.
Dioda Dan

Odpowiedzi:


277

W przypadku żądania Nazwa nagłówka po prostu użyj autoryzacji. Umieść okaziciela przed żetonem. Właśnie go wypróbowałem i działa na mnie.

Autoryzacja: okaziciel TOKEN_STRING

Każda część tokena JWT jest wartością zakodowaną w formacie base64url.


61
Dla wyjaśnienia, pole „Nagłówek” staje się autoryzacją, a pole „Wartość” staje się okazicielem [WHITESPACE] <your-code-here>
Diode Dan

Czy wiesz, która część pola jest zaszyfrowana? Wydaje się, że dane zaraz po ostatnim „.” separator daje mi coś, co wygląda jak śmieciowe znaki. Zakładam, że to faktycznie informacje zaszyfrowane przez generator tokenów?
Dioda Dan

5
Sprawdź jwt.io. Jest sekcja, w której możesz wkleić token JWT i wyświetlić jego zdekodowaną zawartość, jest to najlepszy sposób na zobaczenie, co się dzieje. Sekret serwera jest używany do utworzenia ostatniej sekcji tokenu. JWT tylko podpisuje, że ładunek nie szyfruje, tj. Możesz zdekodować część 1 i 2 ciągu, ale nie możesz go sprawdzić bez sekretu. self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Mick Cullen

4
Czy ktoś mógłby wyjaśnić, dlaczego musimy postawić Bearer przed JWT? Czy to jakiś sygnał dla serwera, że ​​to jest token JWT?
user137717

3
To tylko konwencja - wszystkie szczegóły znajdziesz tutaj: jwt.io/introduction
Michael Noyb

134

Oto obrazek, jeśli to pomaga :)

Listonosz

Aktualizacja:

Zespół listonosza dodał „Token okaziciela” do „karty autoryzacji”: Zaktualizowany listonosz


40

Do tego pytania dodaję ciekawą wskazówkę, która może pomóc wam w testowaniu JWT Apis.

Właściwie jest to bardzo proste.

Kiedy się zalogujesz, w swoim Api (punkcie końcowym logowania) natychmiast otrzymasz swój token i jak powiedział @ mick-Cullen, będziesz musiał użyć JWT w swoim nagłówku jako:

Authorization: Bearer TOKEN_STRING

Teraz, jeśli chcesz zautomatyzować lub po prostu ułatwić sobie życie, testy możesz zapisać jako globalny token, który możesz wywoływać na wszystkich innych punktach końcowych jako:

Authorization: Bearer {{jwt_token}}

On Postman: Następnie utwórz zmienną globalną w Postman jako jwt_token = TOKEN_STRING.

W punkcie końcowym logowania: aby było to przydatne, dodaj na początku zakładki Testy dodaj:

var data = JSON.parse(responseBody);
postman.clearGlobalVariable("jwt_token");
postman.setGlobalVariable("jwt_token", data.jwt_token);

Domyślam się, że Twój interfejs API zwraca token jako json w odpowiedzi jako: {"jwt_token": "TOKEN_STRING"}, może występować pewien rodzaj odchylenia.

W pierwszym wierszu dodajesz odpowiedź do zmienności danych. Wyczyść swój globalny i przypisz wartość.

Więc teraz masz swój token na zmiennej globalnej, co ułatwia używanie Autoryzacji: Nośnik {{jwt_token}} na wszystkich punktach końcowych.

Mam nadzieję, że ta wskazówka pomoże.


EDYTUJ
Coś do przeczytania

O testach na Postman: przykłady testowania

Linia poleceń: Newman

CI: integracja z Jenkins

Fajny post na blogu: automatyzacja testów głównego interfejsu API


Co ciekawe, nie znam koncepcji Testzakładki i kodowania Postman. Czy jest jakiś zasób, który możesz polecić, aby zacząć od tego?
Dioda Dan


Właściwie Listonosz jest naprawdę interesujący i całkiem mocny, jeśli chodzi o testy automatyczne. Listonosza można skonfigurować w taki sposób, aby mógł budować dane losowe Zmienne globalne lub zmienne środowiskowe, które można uruchamiać na testach. I wykonaj iteracyjne uruchomienia i przetestuj każdą odpowiedź jako testy jednostkowe punktu końcowego. Zapisz je i znajdź błędy podczas zmiany kodu. Nie korzystałem z narzędzia wiersza poleceń, ale rozumiem, że możesz go skonfigurować do działania w swoim potoku ci.
Pablo Palacios,

Możesz przeczytać o wierszu poleceń tutaj: getpostman.com/docs/newman_intro
Pablo Palacios

9

Miałem ten sam problem w Flaski po wypróbowaniu pierwszych 2 rozwiązań, które są takie same ( Authorization: Bearer <token>), i otrzymałem to:

{
    "description": "Unsupported authorization type",
    "error": "Invalid JWT header",
    "status_code": 401
}

W końcu udało mi się go rozwiązać za pomocą:

Authorization: jwt <token>

Pomyślałem, że może to zaoszczędzić trochę czasu ludziom, którzy napotykają to samo.


1
I był już Authentication credentials were not providedw djangoużyciu Bearer <token>. rozwiązany za pomocą jwt <token>. Dzięki za rozwiązanie
S_M

7

Oto jak automatycznie ustawić token

Na żądanie logowania / autoryzacji

wprowadź opis obrazu tutaj

Następnie dla uwierzytelnionej strony

wprowadź opis obrazu tutaj


4

Jeśli chcesz używać listonosza, właściwym sposobem jest używanie nagłówków jako takich

klucz: Autoryzacja

wartość: jwt {token}

tak proste jak to.


2

Dla osób, które używają wtyczki Wordpress Advanced Access Manager, aby otworzyć uwierzytelnianie JWT.

W polu Nagłówek należy umieścić uwierzytelnianie zamiast autoryzacji

wprowadź opis obrazu tutaj

AAM wspomniał o tym w swojej dokumentacji ,

Uwaga! AAM nie używa standardowego nagłówka Authorization, ponieważ jest pomijany przez większość serwerów Apache. ...


Mam nadzieję, że to komuś pomoże! Dzięki za inne odpowiedzi też mi pomogły !!


2
  1. Otwórz listonosza.
  2. przejdź do pola „nagłówek”.
  3. można tam zobaczyć puste pola „wartość klucza”.
  4. w typie klucza „Autoryzacja”.
  5. w typie wartości „Bearer (space) your_access_token_value”.

Gotowe!


2

wprowadź opis obrazu tutaj

Wszystko inne tj. Params, Authorization, Body, Pre-request Script, Tests jest puste, wystarczy otworzyć zakładkę Headers i dodać, jak pokazano na obrazku. To samo dotyczy również żądania GET.


0

Jakoś listonosz nie pracował dla mnie. Musiałem użyć rozszerzenia Chrome o nazwie RESTED, które działało.


0

Zrobiłem tak, jak wspomniał moplin. Ale w moim przypadku usługa wysyła token JWT w nagłówkach odpowiedzi, jako wartość pod kluczem "Autoryzacja".

Authorization →Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbWFsIiwiZXhwIjoxNDk4OTIwOTEyfQ.dYEbf4x5TGr_kTtwywKPI2S-xYhsp5RIIBdOa_wl9soqaFkUUKfy73kaMAv_c-6cxTAqBwtskOfr-Gm3QI0gpQ

To, co zrobiłem, to zrobić zmienną globalną w listonosz jako

keystone> JWT
value-> blahblah

w żądaniu logowania-> zakładka Testy dodaj

postman.clearGlobalVariable("jwt");
postman.setGlobalVariable("jwt", postman.getResponseHeader("Authorization"));

w innych żądaniach wybierz zakładkę Nagłówki i podaj

klucz-> Autoryzacja

wartość -> {{jwt}}


0

W najnowszej wersji Postman (7 ++) może nie być pola Bearer w Authorization, więc przejdź do zakładki Header

wybierz klucz jako Authorization iw wartości wpisz JWT


W wersji 7.19.0 +, która również istnieje od jakiegoś czasu, Bearer Tokenna Authorizationkarcie znajduje się pomocnik , dodanie wartości tokena tutaj (zakodowane na stałe lub jako zmienna dynamiczna) spowoduje utworzenie tego samego Authorizationnagłówka dla żądania.
Danny Dainton,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.