Je teste une implémentation de la sécurité basée sur les jetons JWT basée sur le article suivant. J'ai reçu avec succès un jeton du serveur de test. Je n'arrive pas à comprendre comment le programme client Chrome POSTMAN REST envoie le jeton dans l'en-tête.
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 coder le jeton en base 64? Je pensais que je pouvais simplement renvoyer le jeton.
Pour la requête, nom de l'en-tête, 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 codée en base64url.
J'ajoute à cette question un petit conseil intéressant qui pourrait vous aider à tester JWT Apis.
C'est très simple en fait.
Lorsque vous vous connecterez, dans votre Api (point 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 en tant que:
Authorization: Bearer TOKEN_STRING
Désormais, si vous souhaitez automatiser ou simplement vous simplifier la vie, vous pouvez enregistrer le jeton sous forme de test global, que vous pouvez appeler sur tous les autres points de terminaison, en tant que:
Authorization: Bearer {{jwt_token}}
Sur Postman: Créez ensuite une variable Global dans postman telle que jwt_token = TOKEN_STRING.
Sur votre noeud final 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);
Je suppose que votre api renvoie le jeton sous forme de 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 varibale de données . Nettoyez votre Global .__ et affectez la valeur.
Vous avez maintenant 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 aide.
MODIFIER
.__ quelque chose à lire
À propos des tests sur Postman: exemples de tests
Ligne de commande: Newman
Nice blog post: master api test automation
J'ai eu le même problème dans Flask
et 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>
Pensé que cela pourrait économiser du temps aux personnes qui rencontrent la même chose.
D'une manière ou d'une autre, le facteur n'a pas fonctionné pour moi ... J'ai dû utiliser une extension chromée appelée RESTED qui fonctionnait.
Si vous souhaitez utiliser postman correctement, utilisez les en-têtes tels quels.
clé: autorisation
valeur: jwt {token}
aussi simple que cela.
J'ai fait comme mentionné par moplin. Mais dans mon cas, envoyer le JWT dans les en-têtes de réponse, sous la forme d'une valeur sous la clé "Autorisation".
Authorization →Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbWFsIiwiZXhwIjoxNDk4OTIwOTEyfQ.dYEbf4x5TGr_kTtwywKPI2S-xYhsp5RIIBdOa_wl9soqaFkUUKfy73kaMAv_c-6cxTAqBwtskOfr-Gm3QI0gpQ
Ce que je faisais était, faire une variable globale dans le facteur
clé-> jwt
valeur-> blahblah
dans la demande de connexion-> onglet Tests, ajoutez
postman.clearGlobalVariable("jwt");
postman.setGlobalVariable("jwt", postman.getResponseHeader("Authorization"));
dans les autres demandes, sélectionnez l'onglet En-têtes et donnez
clé-> autorisation
valeur -> {{jwt}}
Pour les personnes utilisant le plugin wordpress Advanced Access Manager pour ouvrir l’authentification JWT.
Le champ d'en-tête doit mettre Authentication au lieu de Authorization
AAM l'a mentionné dans sa documentation ,
Remarque! AAM n'utilise pas l'en-tête d'autorisation standard car il est ignoré par la plupart des serveurs Apache. ...
_ {J'espère que ça aidera quelqu'un! Merci pour d'autres réponses m'a beaucoup aidé aussi !!} _
Terminé!