Hola, y bienvenidos a esta charla relámpago sobre no usar JWT para autorización. Mi nombre es Sohan Maheshwar. Trabajo en una startup llamada AuthZed. Y la historia detrás de esta charla es realmente bastante divertida.
Hace algún tiempo, publiqué un video en YouTube llamado Don't Use JWTs for Authorization. Sí, sé que tengo la típica cara de YouTube en la miniatura, etc. Pero lo que pasó fue que aproximadamente una semana después de publicar este video, esto sucedió. Aproximadamente 35,000 vistas en solo una semana y resulta que a veces la gente en internet puede ser no tan amable porque recibí muchos comentarios como este llamándome un genio, pero creo que de manera sarcástica.
La gente diciendo, oye, no tengo idea de lo que estoy hablando, algo sobre un mercado de JWT, lo cual no estoy seguro de qué es. Cuestionando si he leído el RSC para JWT, que admito es una lectura bastante aburrida. Y este creo que habla por sí mismo. Así que pensé en dar esta charla en una conferencia y ver si la gente realmente me dice esto tal vez en persona o en los comentarios. Pero aquí vamos. Así que la idea es no usar JWTs para autorización. Para establecer el contexto, los JWTs o JSON Web Tokens son esencialmente un formato de intercambio de datos. En este formato, hay tres cosas.
Hay un encabezado, una carga útil y una firma. Las dos cosas de las que no nos preocupamos demasiado para esta charla son el encabezado, algunas cosas sobre un tipo de algoritmo, etc. y la firma, que suele ser una firma criptográfica. No nos centremos en eso. La parte en la que quiero que te concentres hoy es la carga útil. Y esta carga útil, nuevamente, tiene algunos datos. Y generalmente hay un nombre, un tiempo de expiración, que es cuando el token expira, un rol, y también scopes. Y aquí es donde las cosas se ponen interesantes porque cómo la gente ha usado JWT para autorización es en el scope añadir cosas como admin o read o write, etc. y asociarlo con permisos para una persona en una aplicación. Así que digamos que tengo permisos de lectura y tú tienes permisos de escritura, eso se incluiría en el scope y este token se pasaría cuando se crea un servicio.
Ahora, curiosamente, este scope ni siquiera es del JWT original o la especificación de JWT y en realidad proviene de una especificación diferente, que es la especificación de intercambio de tokens OR2. Así que, ya sabes, de alguna manera, tal vez ni siquiera fue creado específicamente para esto para autorización y permisos, pero aquí estamos usándolo bastante regularmente. La suposición subyacente detrás de usar esto es que los permisos no cambian durante la vida útil de un token. Y eso es muy, muy falso, ¿verdad? Eso es absolutamente no cierto, especialmente en los sistemas complejos que estamos construyendo hoy.
Comments