Introducción a OAuth 2.0 y OIDC

1

OAuth y OpenID Connect: Autenticación y Autorización Básica

2

¿Qué es la autenticación?

3

Autorización y Control de Acceso Basado en Roles

4

Protocolos Open Authorization y OpenID Connect: Alternativas y Comparación

5

Protección de Endpoints con Autenticación y Autorización Básica

6

Flujo de Open Authorization y Open ID con Discord

JSON Web Tokens

7

JSON Web Tokens: Conceptos, Ventajas y Algoritmos de Firma

8

Comparación de Sesiones y JSON Web Tokens en Autenticación

9

Firmado de JSON Web Tokens con Librería JWT en Node.js

10

Verificación de JSON Web Tokens en Node.js

Quiz: JSON Web Tokens

Open Authorization 2.0

11

Implementación de flujos OAuth 2.0 con APIs populares

12

Flujos de Autorización en OAuth 2.0: Conceptos y Funcionamiento

13

Elección del Flujo Oauth 2.0 según Roles del Cliente y Servidor

14

Implementación de Authorization Code Flow con Spotify y React

15

Implementación de Authorization CodeFlow con Proofkit en Twitter API

16

Implementación de Implicit Flow con Twitch en React

17

Implementación de Client Credentials Flow en Discord

18

Implementación de Resource Owner Password Flow con Auth0

Quiz: Open Authorization 2.0

Open ID Connect

19

OpenID Connect: Autenticación sobre OAuth paso a paso

20

Implementación de Implicit Flow con For Post usando Auth0

21

Implementación del Hybrid Flow en Autenticación de Aplicaciones

Quiz: Open ID Connect

OAuth y OIDC en producción

22

Buenas prácticas y riesgos de los JSON Web Tokens (JWT)

23

Implementación Segura de Open Authorization (OAuth)

24

Autenticación Rápida con NextAlt y GitHub en Next.js

25

Curso Práctico de Autenticación con Outh Zero

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Buenas prácticas y riesgos de los JSON Web Tokens (JWT)

22/25
Recursos

¿Cuándo no son convenientes los JSON Web Tokens?

Los JSON Web Tokens (JWT) son útiles, pero no siempre son la mejor opción. Aquí te explicamos cuándo deberías evitar su uso:

  • Evitar información sensible en el payload: No almacenes datos como números de teléfono o identificaciones personales, ya que los JWT pueden ser decodificados fácilmente. Datos que podrían violar normas, como el GDPR, también deben ser evitados.
  • Mantén el payload liviano: Cuanta más información incluyas, más pesado será el JWT. Esto puede complicar su almacenamiento, especialmente en cookies que tienen un límite de tamaño.
  • Tiempo de expiración corto: Si un JWT se filtra, cualquier persona podría usarlo indefinidamente. Se recomienda que el tiempo de expiración sea lo más breve posible, idealmente no más de 15 minutos.
  • Tratar los JWT como tokens opacos: No decodifiques los tokens en el lado del cliente por razones de seguridad, ya que la validación de la firma no es segura en el cliente.

¿Cuáles son las prácticas recomendadas para manejar JSON Web Tokens?

Al usar JWT, hay que tener en cuenta las siguientes recomendaciones para asegurar una implementación segura y eficaz:

  • Almacenamiento seguro: Utiliza cookies seguras del lado del servidor, especialmente si toda la aplicación pertenece al mismo dominio. Si esto no es posible, mantener los tokens en memoria es una buena alternativa.
Ejemplo de almacenamiento seguro en cookie
setCookie('token', JWTtoken, {
  httpOnly: true,
  secure: true,
  sameSite: 'Strict',
  maxAge: 60 * 15 // 15 minutos
});
  • Bloqueo de tokens filtrados: Implementa un sistema de bloqueo o "deny list" para tokens comprometidos. Asegúrate de que los tokens tengan un identificador único (claim de JTI) para facilidad de seguimiento y etiquetado en las listas de bloqueo.
  • Renovación de tokens: Considera el uso de "Refresh Tokens" o "Silent Authentication" para gestionar tokens expirados. Consulta con tu servicio de autorización para estas funcionalidades.

¿Qué hacer si las llaves de firmado se filtran?

Si las llaves de firmado de los JWT se filtran, es crucial actuar rápidamente:

  • Listas de bloqueo: Añade a la lista de bloqueo todos los tokens generados con las llaves comprometidas.
  • Rotación de llaves: Desarrolla un sistema para rotar las llaves eficientemente. Esta práctica asegurará que incluso si una llave se filtra, los daños pueden ser limitados.

La implementación de estas soluciones puede requerir un desarrollo extenso. Sin embargo, es importante considerar los beneficios de los JWT a largo plazo. Pese a los retos, las soluciones existen y se deben aprovechar al máximo para mejorar la seguridad y funcionalidad de tus aplicaciones.

¿Queremos seguir utilizando JSON Web Tokens?

A pesar de sus beneficios, si no puedes implementar estas prácticas de buenas maneras, debemos considerar otras tecnologías como el manejo de sesiones. La decisión final debe basarse en tus necesidades específicas de seguridad y la capacidad de implementar medidas para mitigar riesgos.

Reflexiona: ¿cuándo es necesario usar JWT y cuándo deberíamos optar por alternativas? Comparte tus ideas y ejemplos en los comentarios para seguir aprendiendo juntos.

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si, me gustaría el curso sobre JWT y el Framework JOSE (Javascript Object Signing and Encryption)

Si no me equivoco en todos los cursos de frontend almacenan el JWT en el localStorage, viene Guillermo y dice no es seguro, ahora no sé qué pensar.

Un ejemplo de uso de los JWT podria ser cuando un cliente se autentica en un sitio web y la aplicacion le asigna un token, este token se almacena del lado del cliente y funciona para futuras solicitudes que realize, pues al tener ya un token de autenticacion este mismo se utilizara para validar la identidad del cliente.

Para realizar llamadas seguras a tu API sin almacenar el access token en el frontend, puedes considerar las siguientes estrategias: 1. **Cookies Seguras**: Almacena el token en una cookie con la bandera HttpOnly. Esto impide que scripts del lado del cliente accedan a la cookie, reduciendo el riesgo de ataques XSS. 2. **Almacenamiento en Memoria**: Guarda el token en la memoria del cliente (por ejemplo, en un estado de React). De esta forma, el token no persiste y solo está disponible durante la sesión activa. 3. **Backend Proxy**: Realiza las llamadas a la API desde un servidor backend que maneje los tokens. El frontend se comunica con tu servidor backend, que a su vez se encarga de interactuar con la API. Estas prácticas ayudan a minimizar el riesgo de exposición del access token y a mantener la seguridad de tu aplicación.
Si es que no quisiera que la información sea decodificada pudiera utilizar un Json Web Encryption para proteger los datos del payload.
Quizás no deberíamos utilizar un JWT cuando tenemos la necesidad de un claim específico que sea protegido. Caso hipotético con un ser en un servidor de autenticación de una entidad gubernamental protegida, CIA, FBI, la identificación del usuario no debería ir en el payload ni quizás el nombre real.