Envoi du jeton JWT dans les en-têtes avec Postman

169

Je teste une implémentation de la sécurité basée sur JWT Token basée sur l' article suivant . J'ai reçu avec succès un jeton du serveur de test. Je ne parviens pas à comprendre comment faire envoyer le jeton par le programme client Chrome POSTMAN REST dans l'en-tête.

Capture d'écran du facteur

Mes questions sont les suivantes:

1) Est-ce que j'utilise le bon nom d'en-tête et / ou l'interface POSTMAN?

2) Dois-je encoder le jeton en base 64? J'ai pensé que je pourrais simplement renvoyer le jeton.

Diode Dan
la source
Salut, où puis-je voir dans POSTMAN le jeton jwt que j'ai reçu?
Usr
1
@MLondei, cela dépend de la configuration du serveur de réception. Il peut revenir en tant qu'URL (le trouver dans la chaîne URL) ou il peut revenir dans le corps de la réponse (le trouver dans le champ du corps de la réponse). Ce sont les deux principaux dont je suis au courant.
Diode Dan

Réponses:

277

Pour le nom de l'en-tête de la demande, utilisez simplement l'autorisation. Placez le porteur avant le jeton. Je viens de l'essayer et cela fonctionne pour moi.

Autorisation: porteur TOKEN_STRING

Chaque partie du JWT est une valeur encodée base64url.

Mick Cullen
la source
61
Pour clarifier, le champ "En-tête" devient Autorisation et le champ "Valeur" devient Bearer [WHITESPACE] <your-code-here>
Diode Dan
Savez-vous quelle partie du champ est cryptée? Il semble que les données juste après le dernier «.» séparateur me donne ce qui ressemble à des caractères de déchets. Je suppose que ce sont en fait des informations cryptées par le générateur de jetons?
Diode Dan
5
Consultez jwt.io. Il y a une section où vous pouvez coller un JWT et voir son contenu décodé, c'est la meilleure façon de voir ce qui se passe. La chaîne secrète du serveur est utilisée pour créer la dernière section du jeton. JWT signe seulement que la charge utile ne crypte pas, c'est-à-dire que vous pouvez décoder les parties 1 et 2 de la chaîne mais ne peut pas la valider sans le secret. self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Mick Cullen
4
Quelqu'un peut-il expliquer pourquoi nous devons placer Bearer avant le JWT? Est-ce une sorte de signal au serveur indiquant qu'il s'agit d'un JWT?
user137717
3
Ce n'est que la convention - vous pouvez trouver tous les détails ici: jwt.io/introduction
Michael Noyb
134

Voici une image si ça aide :)

Facteur

Mettre à jour:

L'équipe du facteur a ajouté "Jeton de porteur" à "l'onglet d'autorisation": Facteur mis à jour

prasanthv
la source
40

J'ajoute à cette question une petite astuce intéressante qui peut vous aider à tester JWT Apis.

C'est très simple en fait.

Lorsque vous vous connectez, dans votre Api (point de terminaison de connexion), vous recevrez immédiatement votre jeton, et comme @ mick-cullen l'a dit, vous devrez utiliser le JWT sur votre en-tête comme:

Authorization: Bearer TOKEN_STRING

Désormais, si vous souhaitez automatiser ou simplement vous simplifier la vie, vos tests vous permettent d'enregistrer le jeton en tant que fichier global que vous pouvez appeler sur tous les autres points de terminaison en tant que:

Authorization: Bearer {{jwt_token}}

Sur Postman: Ensuite, créez une variable globale dans postman comme jwt_token = TOKEN_STRING.

Sur votre point de terminaison de connexion: pour le rendre utile, ajoutez au début de l'onglet Tests, ajoutez:

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

J'imagine que votre API renvoie le jeton en tant que json sur la réponse sous la forme: {"jwt_token": "TOKEN_STRING"}, il peut y avoir une sorte de variation.

Sur la première ligne, vous ajoutez la réponse à la variable de données. Nettoyez votre Global et attribuez la valeur.

Alors maintenant, vous avez votre jeton sur la variable globale, ce qui facilite l'utilisation de Authorization: Bearer {{jwt_token}} sur tous vos points de terminaison.

J'espère que cette astuce vous aidera.


MODIFIER
Quelque chose à lire

À propos des tests sur Postman: exemples de tests

Ligne de commande: Newman

CI: intégration avec Jenkins

Bel article de blog: automatisation des tests de l'API maître

Pablo Palacios
la source
Intéressant, je ne suis pas familier avec le concept de l' Testonglet et le codage Postman. Y a-t-il une ressource que vous recommandez pour commencer?
Diode Dan
En fait, Postman est vraiment intéressant et assez fort en matière de tests automatisés. Vous pouvez configurer Postman de manière à ce qu'il puisse créer des données aléatoires, des variables globales ou des variables d'environnement que vous pouvez exécuter sur les tests. Et faites des exécutions itératives et testez n'importe quelle réponse sous forme de tests unitaires de point de terminaison. Enregistrez-les et trouvez des erreurs lorsque vous changez de code. Je n'ai pas utilisé l'utilitaire de ligne de commande mais je comprends que vous pouvez le configurer pour qu'il s'exécute dans votre ci-pipeline.
Pablo Palacios
Vous pouvez lire sur la ligne de commande ici: getpostman.com/docs/newman_intro
Pablo Palacios
9

J'ai eu le même problème Flasket après avoir essayé les 2 premières solutions qui sont les mêmes ( Authorization: Bearer <token>), et obtenu ceci:

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

J'ai finalement réussi à le résoudre en utilisant:

Authorization: jwt <token>

Je pensais que cela pourrait faire gagner du temps aux personnes qui rencontrent la même chose.

Vucko
la source
1
Je commençais Authentication credentials were not providedà djangoutiliser Bearer <token>. résolu avec jwt <token>. Merci pour la solution
S_M
7

Voici comment définir ce jeton automatiquement

Sur votre demande de connexion / authentification

entrez la description de l'image ici

Puis pour la page authentifiée

entrez la description de l'image ici

Emeka Mbah
la source
4

Si vous souhaitez utiliser le facteur, la bonne manière est d'utiliser les en-têtes comme tels

clé: Autorisation

valeur: jwt {token}

aussi simple que cela.

Adi
la source
2

Pour les personnes qui utilisent le plugin wordpress Advanced Access Manager pour ouvrir l'authentification JWT.

Le champ En-tête doit mettre Authentification au lieu d' Autorisation

entrez la description de l'image ici

AAM l'a mentionné dans sa documentation ,

Remarque! AAM n'utilise pas d'en-tête d'autorisation standard car il est ignoré par la plupart des serveurs Apache. ...


J'espère que cela aide quelqu'un! Merci pour les autres réponses m'a beaucoup aidé aussi !!

Jeffsama
la source
2
  1. Ouvrez le facteur.
  2. aller dans le champ "en-tête".
  3. là, on peut voir des blancs "valeur clé".
  4. dans le type de clé "Autorisation".
  5. dans le type de valeur "Bearer (space) your_access_token_value".

Terminé!

Dheeraj
la source
2

entrez la description de l'image ici

Tout le reste c'est à dire. Paramètres, autorisation, corps, script de pré-demande, les tests sont vides, ouvrez simplement l' onglet En- têtes et ajoutez comme indiqué dans l'image. C'est la même chose pour la demande GET.

coda
la source
0

Le facteur n'a pas fonctionné pour moi. J'ai dû utiliser une extension chrome appelée RESTED qui a fonctionné.

RamanSM
la source
0

J'ai fait comme moplin mentionné. Mais dans mon cas, le service envoie le JWT dans les en-têtes de réponse, en tant que valeur sous la clé "Autorisation".

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

Ce que j'ai fait, c'est de créer une variable globale dans Postman comme

clé-
> valeur jwt-> blabla

dans la demande de connexion-> Onglet Tests, ajoutez

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

dans d'autres demandes, sélectionnez l'onglet En-têtes et donnez

clé-> Autorisation

valeur -> {{jwt}}

Yasitha Bandara
la source
0

Dans la dernière version de Postman (7 ++), il se peut qu'il n'y ait pas de champ Bearer dans l'autorisation, alors allez à l'onglet En-tête

sélectionnez la clé comme autorisation et écrivez la valeur JWT

Abhishek Yadav
la source
Pour la v7.19.0 + et elle existe également depuis un certain temps, il y a un Bearer Tokenassistant dans l' Authorizationonglet, l'ajout de la valeur du jeton ici (codé en dur ou en tant que variable dynamique) créera le même en- Authorizationtête pour la requête.
Danny Dainton le