Invio di token JWT nelle intestazioni con Postman


169

Sto testando un'implementazione della sicurezza basata su token JWT basata sul seguente articolo . Ho ricevuto correttamente un token dal server di prova. Non riesco a capire come fare in modo che il programma client POSTMAN REST di Chrome invii il token nell'intestazione.

screenshot del postino

Le mie domande sono le seguenti:

1) Sto usando il nome dell'intestazione e / o l'interfaccia POSTMAN corretti?

2) Devo basare 64 per codificare il token? Pensavo di poter semplicemente rispedire il token.


Ciao, dove posso vedere in POSTMAN il token jwt che ho ricevuto?
Usr

1
@MLondei, dipende dal modo in cui è configurato il server ricevente. Può tornare come URL (trovarlo nella stringa URL) o può tornare nel corpo della risposta (trovarlo nel campo del corpo della risposta). Questi sono i due principali di cui sono a conoscenza.
Diodo Dan,

Risposte:


277

Per la richiesta Nome intestazione basta usare Autorizzazione. Posiziona Bearer prima del token. L'ho appena provato e funziona per me.

Autorizzazione: Bearer TOKEN_STRING

Ogni parte del JWT è un valore codificato base64url.


61
Proprio come chiarimento, il campo "Header" diventa Autorizzazione e il campo "Value" diventa Bearer [WHITESPACE] <your-code-here>
Diode Dan

Sai quale parte del campo è crittografata? Sembra che i dati subito dopo l'ultimo '.' il separatore mi sta dando quelli che sembrano personaggi spazzatura. Presumo che si tratti effettivamente di informazioni crittografate dal generatore di token?
Diodo Dan,

5
Dai un'occhiata a jwt.io. C'è una sezione in cui puoi incollare un JWT e visualizzarne i contenuti decodificati, è il modo migliore per vedere cosa sta succedendo. La stringa segreta del server viene utilizzata per creare l'ultima sezione del token. JWT indica solo che il payload non crittografa, ovvero è possibile decodificare le parti 1 e 2 della stringa ma non è possibile convalidarlo senza il segreto. self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Mick Cullen

4
Qualcuno può approfondire il motivo per cui dobbiamo mettere Bearer davanti al JWT? È una sorta di segnale al server che si tratta di un JWT?
user137717

3
Questa è solo la convention - puoi trovare tutti i dettagli qui: jwt.io/introduction
Michael Noyb

134

Ecco un'immagine se aiuta :)

Postino

Aggiornare:

Il team del postino ha aggiunto "Toker portatore" alla "scheda di autorizzazione": Postino aggiornato


40

Aggiungo a questa domanda un piccolo suggerimento interessante che può aiutare voi ragazzi a testare JWT Apis.

In realtà è molto semplice.

Quando accedi, nella tua API (endpoint di accesso), riceverai immediatamente il tuo token e, come ha detto @ mick-cullen, dovrai usare JWT sulla tua intestazione come:

Authorization: Bearer TOKEN_STRING

Ora se ti piace automatizzare o semplicemente semplificarti la vita, i tuoi test puoi salvare il token come globale che puoi chiamare su tutti gli altri endpoint come:

Authorization: Bearer {{jwt_token}}

Su postino: quindi crea una variabile globale in postino come jwt_token = TOKEN_STRING.

Sul tuo endpoint di accesso: per renderlo utile, aggiungi all'inizio della scheda Test aggiungi:

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

Immagino che il tuo API stia restituendo il token come json sulla risposta come: {"jwt_token": "TOKEN_STRING"}, potrebbe esserci una sorta di variazione.

Nella prima riga aggiungi la risposta al varibale di dati. Pulisci il tuo globale e assegna il valore.

Quindi ora hai il tuo token sulla variabile globale, ciò che rende facile da usare Autorizzazione: Bearer {{jwt_token}} su tutti i tuoi endpoint.

Spero che questo suggerimento aiuti.


EDIT
Qualcosa da leggere

Informazioni sui test su Postman: esempi di test

Riga di comando: Newman

CI: integrazione con Jenkins

Bel post sul blog: master api test automation


Interessante, non ho familiarità con il concetto di Testtab e la codifica Postman. C'è una risorsa che consigli per iniziare con questo?
Diodo Dan,


In realtà Postman è davvero interessante e piuttosto forte quando si tratta di test automatizzati. È possibile configurare il postino in modo tale da poter creare dati casuali Variabili globali o Variabili di ambiente che è possibile eseguire sui test. E esegui esecuzioni iterative e testa qualsiasi risposta come test di unità endpoint. Salvali e trova errori quando cambi codice. Non ho usato l'utilità della riga di comando ma capisco che puoi configurarlo per l'esecuzione nella tua pipeline.
Pablo Palacios,

Puoi leggere la riga di comando qui: getpostman.com/docs/newman_intro
Pablo Palacios

9

Ho avuto lo stesso problema in Flaske dopo aver provato le prime 2 soluzioni che sono uguali ( Authorization: Bearer <token>), e ottenendo questo:

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

Sono riuscito a risolverlo finalmente usando:

Authorization: jwt <token>

Ho pensato che potesse far risparmiare un po 'di tempo alle persone che incontrano la stessa cosa.


1
Stavo entrando Authentication credentials were not providedin djangouso Bearer <token>. risolto con jwt <token>. Grazie per la soluzione
S_M

7

Ecco come impostare il token automaticamente

Sulla tua richiesta di accesso / autenticazione

inserisci qui la descrizione dell'immagine

Quindi per la pagina autenticata

inserisci qui la descrizione dell'immagine


4

Se desideri utilizzare il postino nel modo giusto è usare le intestazioni in quanto tali

chiave: autorizzazione

valore: jwt {token}

così semplice.


2

Per le persone che utilizzano il plugin wordpress Advanced Access Manager per aprire l'autenticazione JWT.

Il campo Intestazione deve inserire Autenticazione anziché Autorizzazione

inserisci qui la descrizione dell'immagine

AAM l'ha menzionato nella loro documentazione ,

Nota! AAM non utilizza l'intestazione di autorizzazione standard poiché viene ignorata dalla maggior parte dei server Apache. ...


Spero che aiuti qualcuno! Grazie per le altre risposte mi hanno aiutato molto !!


2
  1. Apri postino.
  2. vai al campo "intestazione".
  3. lì si possono vedere gli spazi "valore chiave".
  4. nel tipo di chiave "Autorizzazione".
  5. nel tipo di valore "Bearer (spazio) your_access_token_value".

Fatto!


2

inserisci qui la descrizione dell'immagine

Tutto il resto cioè. Param, Autorizzazione, Corpo, Script pre-richiesta, Test è vuoto, basta aprire la scheda Intestazioni e aggiungere come mostrato nell'immagine. È lo stesso anche per la richiesta GET.


0

In qualche modo il postino non ha funzionato per me. Ho dovuto usare un'estensione di Chrome chiamata RESTED che funzionava.


0

Ho fatto come menzionato moplin. Ma nel mio caso il servizio invia il JWT nelle intestazioni di risposta, come valore sotto la chiave "Autorizzazione".

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

Quello che ho fatto è stato, fare una variabile globale in postino come

chiave->
valore jwt-> blahblah

nella richiesta di accesso-> scheda Test, aggiungi

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

in altre richieste selezionare la scheda Intestazioni e dare

a chiave> Autorizzazione

valore -> {{}} JWT


0

Nell'ultima versione di Postman (7 ++) potrebbe non esserci campo Bearer in Autorizzazione Quindi vai alla scheda Header

seleziona chiave come Autorizzazione e in valore scrivi JWT


Per v7.19.0 + ed è stato anche lì per un po ', c'è un Bearer Tokenaiutante nella Authorizationscheda, aggiungendo qui il valore del token (Hardcoded o come variabile dinamica) creerà la stessa Authorizationintestazione per la richiesta.
Danny Dainton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.