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.


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.


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


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


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.


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


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.


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 !!


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é!


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.


0

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


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}}


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.