¿Es seguro devolver un JWT a un usuario que ya ha iniciado sesión?

0

Estoy usando JWT para manejar un esquema de SSO donde dos sistemas (llamémoslos A y B) requieren autenticación, pero el almacén de datos del usuario está en un solo sistema (digamos A). Todo lo que he visto sobre JWT involucra al usuario que publica el nombre de usuario / contraseña para recibir el JWT, pero me pregunto si es seguro devolver un JWT a un usuario que ya haya iniciado sesión.

Para hacerlo un poco más concreto, el sistema de autenticación A (example.com) utiliza autenticación basada en cookies / sesión, pero el segundo sistema B (subdominio.ejemplo.com) necesita la JWT para autenticarse. No queremos forzar a los usuarios que ya han iniciado sesión y que tienen una cookie de sesión a ingresar nuevamente el nombre de usuario / contraseña para obtener un JWT, por lo que pensamos que implementaremos un punto final de API que devuelva un JWT a un usuario quién ya inició sesión (a través de la sesión de autenticación), que el usuario puede luego autenticar con el sistema B. En particular, estamos usando Django REST Framework JWT, que brinda la opción de crear manualmente el JWT: enlace

Por ejemplo, tendríamos un punto final de API donde puedes GET https://systemA.com/api/gimme-jwt/

if user is already authed: return JWT else: return 401

Una vez más, la diferencia clave entre esto y todo lo que he visto es que estamos devolviendo un JWT a un usuario que ya ha iniciado sesión.

    
pregunta andy 19.11.2015 - 23:52
fuente

3 respuestas

1

Realmente la pregunta debería ser

  

¿Cómo puedo estar seguro de que un usuario que inició sesión es la misma persona que inició sesión para poder enviarles un JWT?

Y la respuesta a eso es que no puedes. Esto se debe a las mejores prácticas de seguridad:

  

Suponga que toda la entrada de los usuarios es falsa o un ataque hasta que se demuestre lo contrario.

Esto significa que debe requerir que se vuelvan a autenticar para recibir el JWT, de lo contrario no puede estar seguro de que no lo dejaron abierto y se fue.

Otra consideración es que debe usar canales cifrados y cifrar el JWT. Si esto es más de HTTPS, puede configurarlo como un valor de cookie para hacer la vida un poco más fácil y más segura.

Los JWT conllevan un poco de sobrecarga, ya que en cada empresa necesitas descifrarlos, verificarlos y luego modificarlos si es necesario, luego volver a cifrarlos, pero no hay forma de evitar que de otra forma estar transfiriendo información de estado sin cifrar que siempre es un no-no.
Debe observar las prácticas comunes con JWT y los vectores de amenaza conocidos que existen debido a ello.

    
respondido por el Robert Mennell 19.04.2016 - 20:33
fuente
0

Siempre que esté seguro de que le está dando el JWT al usuario real que inició sesión, entregarlo después de la autenticación no es un problema.

    
respondido por el Neil Smithline 20.11.2015 - 05:06
fuente
0

Proporcionar un token JWT al usuario autenticado no es un problema, pero debe tener en cuenta las siguientes consideraciones:

  1. ¿Su entorno es seguro (es una red interna o pública)? ¿Utiliza transporte seguro (TLS) para las comunicaciones? Si no es así, debe preocuparse por la integridad y privacidad del token utilizando JWS y / o JWE
  2. ¿Transfiere datos de PII (información de identificación personal)? Si es así, siempre debe usar el cifrado para los tokens.

De todos modos, antes de usar los tokens JWT, observe la especificación de OpenID Connect enlace que describe cómo use tokens de JWT para SSO, algunas vulnerabilidades comunes y problemas de privacidad.

    
respondido por el Salamander 20.11.2015 - 05:23
fuente

Lea otras preguntas en las etiquetas