Envío de token JWT en los encabezados con Postman

169

Estoy probando una implementación de seguridad basada en Token JWT basada en el siguiente artículo . He recibido con éxito un token del servidor de prueba. No puedo entender cómo hacer que el programa Chrome POSTMAN REST Client envíe el token en el encabezado.

captura de pantalla del cartero

Mis preguntas son las siguientes:

1) ¿Estoy usando el nombre de encabezado y / o la interfaz POSTMAN correctos?

2) ¿Necesito que la base 64 codifique el token? Pensé que podría devolver el token.

Diode Dan
fuente
Hola, ¿dónde puedo ver en POSTMAN el token jwt que he recibido?
Usr
1
@MLondei, depende de la forma en que esté configurado el servidor receptor. Puede regresar como una URL (encuéntrela en la cadena de la URL) o puede regresar en el cuerpo de la respuesta (encuéntrela en el campo del cuerpo de la respuesta). Esos son los dos principales que conozco.
Diode Dan

Respuestas:

277

Para el nombre del encabezado de la solicitud, use Autorización. Colocar portador antes de la ficha. Acabo de probarlo y funciona para mí.

Autorización: Portador TOKEN_STRING

Cada parte del JWT es un valor codificado en base64url.

Mick Cullen
fuente
61
Como aclaración, el campo "Encabezado" se convierte en Autorización y el campo "Valor" se convierte en Portador [WHITESPACE] <your-code-here>
Diode Dan
¿Sabes qué parte del campo está encriptada? Parece que los datos justo después del último '.' separator me está dando lo que parecen caracteres basura. ¿Asumo que esto es realmente información encriptada por el generador de tokens?
Diode Dan
55
Echa un vistazo a jwt.io. Hay una sección donde puedes pegar un JWT y ver su contenido decodificado, es la mejor manera de ver lo que está sucediendo. La cadena secreta del servidor se usa para crear la última sección del token. JWT solo firma que la carga útil no se cifra, es decir, puede decodificar las partes 1 y 2 de la cadena pero no puede validarla sin el secreto. self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Mick Cullen
44
¿Alguien puede explicar por qué necesitamos poner a Bearer antes del JWT? ¿Es esta una especie de señal al servidor de que se trata de un JWT?
user137717
3
Esa es solo la convención: puede encontrar todos los detalles aquí: jwt.io/introduction
Michael Noyb
134

Aquí hay una imagen si ayuda :)

Cartero

Actualizar:

El equipo de carteros agregó "Token de portador" a la "pestaña de autorización": Cartero actualizado

prasanthv
fuente
40

Estoy agregando a esta pregunta un pequeño consejo interesante que puede ayudarlos a probar JWT Apis.

Es muy simple en realidad.

Cuando inicie sesión, en su Api (punto final de inicio de sesión), recibirá inmediatamente su token y, como dijo @ mick-cullen, tendrá que usar el JWT en su encabezado como:

Authorization: Bearer TOKEN_STRING

Ahora, si desea automatizar o simplemente hacer que su vida sea más fácil, sus pruebas pueden guardar el token como un global que puede llamar en todos los demás puntos finales como:

Authorization: Bearer {{jwt_token}}

En cartero: luego haga una variable global en cartero como jwt_token = TOKEN_STRING.

En su punto final de inicio de sesión: para que sea útil, agregue al comienzo de la pestaña Pruebas agregar:

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

Supongo que su API devuelve el token como un json en la respuesta como: {"jwt_token": "TOKEN_STRING"}, puede haber algún tipo de variación.

En la primera línea, agrega la respuesta a la variable de datos. Limpia tu Global y asigna el valor.

Entonces, ahora tiene su token en la variable global, lo que facilita su uso Autorización: Portador {{jwt_token}} en todos sus puntos finales.

Espero que este consejo te ayude.


EDITAR
algo para leer

Acerca de las pruebas en Postman: ejemplos de pruebas

Línea de comando: Newman

CI: integrando con Jenkins

Buena publicación de blog: automatización de prueba de api maestra

Pablo Palacios
fuente
Interesante, no estoy familiarizado con el concepto de la Testpestaña y la codificación del cartero. ¿Hay algún recurso que recomiende para comenzar con esto?
Diode Dan
En realidad, Postman es realmente interesante y bastante fuerte cuando se trata de pruebas automatizadas. Puede configurar el cartero de tal manera que pueda construir datos aleatorios variables globales o variables de entorno que puede ejecutar en las pruebas. Y realice ejecuciones iterativas y pruebe cualquier respuesta como pruebas de unidad de punto final. Guárdelos y encuentre errores cuando cambie el código. No he usado la utilidad de línea de comandos, pero entiendo que puede configurarla para que se ejecute en su ci-pipeline.
Pablo Palacios
Puede leer sobre la línea de comandos aquí: getpostman.com/docs/newman_intro
Pablo Palacios
9

Tuve el mismo problema en Flasky después de probar las 2 primeras soluciones que son iguales ( Authorization: Bearer <token>), y obteniendo esto:

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

Finalmente pude resolverlo usando:

Authorization: jwt <token>

Pensé que podría ahorrar algo de tiempo a las personas que se encuentran con lo mismo.

Vucko
fuente
1
Me estaba poniendo Authentication credentials were not provideden djangouso Bearer <token>. resuelto con jwt <token>. Gracias por la solución
S_M
7

Aquí se explica cómo configurar el token automáticamente

En su solicitud de inicio de sesión / autenticación

ingrese la descripción de la imagen aquí

Luego para la página autenticada

ingrese la descripción de la imagen aquí

Emeka Mbah
fuente
4

Si desea utilizar cartero, la forma correcta es utilizar los encabezados como tales

clave: Autorización

valor: jwt {token}

Tan sencillo como eso.

Adi
fuente
2

Para las personas que usan el complemento de acceso avanzado de WordPress Manager para abrir la autenticación JWT.

El campo Encabezado debe colocar Autenticación en lugar de Autorización

ingrese la descripción de la imagen aquí

AAM lo mencionó dentro de su documentación ,

¡Nota! AAM no utiliza el encabezado de autorización estándar, ya que la mayoría de los servidores de Apache lo omiten. ...


Espero que ayude a alguien! ¡Gracias por otras respuestas también me ayudaron mucho!

jeffsama
fuente
2
  1. Cartero abierto.
  2. ir al campo "encabezado".
  3. allí se pueden ver espacios en blanco de "valor clave".
  4. en clave tipo "Autorización".
  5. en el tipo de valor "Portador (espacio) your_access_token_value".

¡Hecho!

Dheeraj
fuente
2

ingrese la descripción de la imagen aquí

Todo lo demás, es decir. Params, Authorization, Body, Pre-request Script, Tests está vacío, solo abra la pestaña Encabezados y agregue como se muestra en la imagen. Es lo mismo para la solicitud GET también.

coda
fuente
0

De alguna manera, el cartero no funcionó para mí. Tuve que usar una extensión de Chrome llamada RESTED que funcionó.

RamanSM
fuente
0

Hice lo que mencionó moplin. Pero en mi caso, el servicio envió el JWT en encabezados de respuesta, como un valor bajo la clave "Autorización".

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

Lo que hice fue hacer una variable global en cartero como

clave-
> valor jwt- > blahblah

en solicitud de inicio de sesión-> pestaña Pruebas, agregue

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

en otras solicitudes, seleccione la pestaña Encabezados y proporcione

clave-> Autorización

valor -> {{jwt}}

Yasitha Bandara
fuente
0

En Postman, la última versión (7 ++) puede ser que no haya un campo Portador en la Autorización. Vaya a la pestaña Encabezado

seleccione clave como Autorización y en valor escriba JWT

Abhishek Yadav
fuente
Para v7.19.0 + y también ha estado allí por un tiempo, hay un Bearer Tokenasistente en la Authorizationpestaña, agregando el valor del token aquí (codificado o como variable dinámica) creará el mismo Authorizationencabezado para la solicitud.
Danny Dainton