español oauth oauth-2.0 access-token jwt

español - ¿Puede un token de acceso OAuth 2.0 ser un JWT?



jwt vs oauth2 (2)

Por lo que puedo decir, la especificación OAuth 2.0 es extremadamente vaga en términos de qué forma debe tener un access token :

El token puede denotar un identificador utilizado para recuperar la información de autorización o puede autocontenerse la información de autorización de manera verificable (es decir, una cadena de token que consta de algunos datos y una firma). Se pueden requerir credenciales de autenticación adicionales, que están fuera del alcance de esta especificación, para que el cliente use un token.

El token de acceso proporciona una capa de abstracción, que reemplaza diferentes construcciones de autorización (por ejemplo, nombre de usuario y contraseña) con un solo token entendido por el servidor de recursos. Esta abstracción permite emitir tokens de acceso más restrictivos que la concesión de autorización utilizada para obtenerlos, así como eliminar la necesidad del servidor de recursos de comprender una amplia gama de métodos de autenticación.

Los tokens de acceso pueden tener diferentes formatos, estructuras y métodos de utilización (por ejemplo, propiedades criptográficas) según los requisitos de seguridad del servidor de recursos. Los atributos del token de acceso y los métodos utilizados para acceder a los recursos protegidos están más allá del alcance de esta especificación y están definidos por especificaciones complementarias como RFC6750 .

(énfasis añadido)

El RFC6750 vinculado no ofrece mucha más especificidad. Hay un ejemplo de cuerpo de respuesta HTTP que muestra:

{ "access_token":"mF_9.B5f-4.1JqM", "token_type":"Bearer", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA" }

Esto parece indicar que access_token puede ser texto ASCII opaco, como un token web JSON codificado (JWT)

Desde mi perspectiva, parece que JWT-as-access-token tiene algunas propiedades deseables:

  • Es una especificación conocida, con bibliotecas de adopción y cliente bastante amplias disponibles en muchos idiomas.

  • Permite una fácil firma y verificación utilizando bibliotecas criptográficas vetadas.

  • Debido a que se puede descodificar a JSON, nos permitiría incluir metadatos e información sobre el token dentro del token.

Mis preguntas son: Primero, ¿está permitido que el token de acceso sea un JWT? En segundo lugar, si está permitido de acuerdo con la especificación, ¿existen consideraciones adicionales que hagan que el uso de un JWT como token de acceso sea una mala idea?


A1: El uso de un JWT como token de acceso es ciertamente permitido por especificación exactamente porque la especificación no restringe su formato.

A2: La idea de usar un JWT como token de acceso es que puede ser autocontenido para que el objetivo pueda verificar el token de acceso y usar el contenido asociado sin tener que volver al Servidor de Autorización. Esa es una gran propiedad pero hace la revocación más difícil. Entonces, si su sistema requiere una capacidad para la revocación inmediata del acceso, un JWT probablemente no sea la opción correcta para un token de acceso (aunque puede llegar bastante lejos al reducir la vida útil del JWT).


Siempre que el Servidor de Autorización y el Servidor de Recursos estén de acuerdo en lo que significa el token de acceso, no importa cuál sea su contenido. Por lo tanto, la única razón por la que podría tener un problema sería si utilizara diferentes bibliotecas o marcos al implementar esos dos servidores.