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

JSON Web Tokens: Conceptos, Ventajas y Algoritmos de Firma

7/25
Recursos

¿Qué es un JSON Web Token y cómo funciona?

Los JSON Web Tokens (JWT) son una tecnología esencial en el ámbito de la seguridad web, sobre todo cuando hablamos de autenticación. Aunque su uso se ha popularizado, es crucial entender qué son, cómo funcionan y cuáles son sus pros y contras en comparación con las sesiones tradicionales. Los JWT no existen por sí solos; representan una abstracción que puede implementarse como un JSON Web Signature (JWS) o un JSON Web Encryption (JWE). En la web, los más comunes son los JWS, y su formato suele incluir un encabezado, un payload y una firma, separados por puntos. Cada uno de estos componentes está codificado y puede ser decodificado para ver su contenido, especialmente mediante herramientas como JWT.io.

¿Qué son los Claim Names en los JWT?

Los Claim Names son elementos en el payload de un JWT que aportan información útil sobre la identidad del usuario u otros datos relevantes.

  • Registered Claims: Son los más comunes y recomendados para asegurar la interoperabilidad entre sistemas. Incluyen:

    • Issuer: El servidor de autorización que emite el token.
    • Subject: Usualmente contiene el ID del usuario.
    • Audience: Es el destinatario del token, como una API.
    • Expiration Time: Es esencial que los tokens tengan un tiempo de expiración corto para maximizar la seguridad.
  • Public Claims: Son nombres de claims comunes como el nombre o correo electrónico, que deberían registrarse ante la IANA para evitar colisiones con otros.

  • Private Claims: Son personalizados para la aplicación y no suelen ser de interés general, como el identificador de un empleado o el área a la que pertenece.

¿Cómo garantizan los JWT seguridad?

La seguridad en los JWT proviene de su firma. Esta se genera a partir del encabezado y el payload codificados, utilizando un algoritmo de firmado que garantiza la integridad del token. Este proceso impide que un atacante pueda modificar el payload de un token y firmarlo de nuevo sin que se detecte la alteración.

  • Usar un algoritmo de firmado como RS-256 (asimétrico) que utiliza una llave pública y una privada es clave. La privada, conocida solo por el servidor de autorización, firma el token, mientras que la pública se usa para verificar su validez.
  • Utlizar H256 (simétrico), que usa la misma llave privada para firmar y verificar, requieren estrictas medidas de seguridad para proteger la llave.

¿Qué retos y prácticas puedes explorar con JWT?

Te proponemos un ejercicio interesante: examina los servicios web que consumes para identificar si utilizan JWT dentro de cookies, local storage o session storage. Si detectas un JWT, puedes utilizar JWT.io para decodificar el encabezado y el payload. Comparte tus conclusiones y experiencias, pero no reveles los tokens en sí para proteger la información sensible.

Explorar y comprender estos tokens puede darte una visión más clara de los mecanismos de autenticación actuales, así como motivarte a seguir ampliando tus conocimientos en seguridad web. Recuerda, estos pequeños pasos son los que marcan la diferencia en tu aprendizaje continuo. ¡Adelante, el camino del conocimiento es vasto y fascinante!

Aportes 8

Preguntas 0

Ordenar por:

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

Hola tú

Si no te quedó muy claro que es un claim name, te dejo esta definición recolectada de múltiples fuentes:

¿Qué es un claim name?
Son los nombres de los campos o propiedades dentro del token, un JWT es una estructura de datos en formato JSON que permite transmitir información de manera segura. Un token tiene headers, payload y la signature.
El payload contiene los claims o afirmaciones, que son declaraciones sobre una entidad (usuario, dispositivo, etc) en metadatos adicionales a los de los header. Los más usados son sub, iss, exp e iat. Aquí en estos campos se envía información como identificador del usuario, emisor del token, fecha de expiración, etc.
Cada claim name tiene un significado y una semántica definidos en las especificaciones de JWT, como el RFC 7519. Al validar un JWT, se verifica la presencia y el contenido de los claim names específicos para garantizar la autenticidad y autorización adecuadas.

(perdon por lo que vas a leer a continuacion) No me quedo taaaaan claro la clase, asi que aqui les va una explicacion, de como funciona JWT que es una tecnologia que aplicas a tu gusto (tiene estandares) para la "seguridad" o generacion te tokens cliente-servidor. Primero entendamos que JWT es un string, SI un string sencillo que esta dividido en 3 separados por . Osea, header.payload.firma (LITERALMENTE) entonces, obvio cada parte la compone algo como esto: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 . eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 . eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 Que obviamente, esta enviado transformado a base64 que es una forma de (codificar) datos para que no sean legibles facilmente a la primera por un humano (si por pc) Entonces, header tiene solamente 2 cosas si vemos el objeto traduccido: ``` { "typ": "JWT", "alg": "HS256" } ``` Que son: El tipo de token (`typ`), que casi siempre es `JWT` y El algoritmo de firma (`alg`), como `HS256` (HMAC con SHA-256) o `RS256` (RSA con SHA-256). LUEGO viene el payload, que usa "claims" o palabras clave que son ESTANDAR en el mundo que deben ser usados, estan los estandares para cosas especificas, los publicos y los privados, seria algo como asi: ``` { "sub": "1234567890", "name": "John Doe", "admin": true, "iat": 1689072000, "exp": 1689075600 } ``` Eso, sencillo ahora viene la firma que solo es correr el algoritmo con la info previa metiada que es: ``` HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), clave\_secreta )``` Esto genera un hash que se convierte en la parte de la firma del JWT. Ejemplo de firma: ``` SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV\_adQssw5c ``` AHORAAA viene lo INTERESANTE, como SE yo que no fue manipulado (man in the middle) o bueno el choro de tu proveedor de internet para ver que carajos hay en ese JWT. Pues bien... Con esa firma, el servidor genera algo UNICO no puede ser modificado porque no te va a dar! Eso UNICO es la traduccion de lo antes enviado, yasta eso es todo eso es todo. Sigue no te rindas! Go ahead. 💚
Hace poco descubrí que Duolingo utiliza tokens sin vencimiento (al menos en la versión web)

Justo eso lo hice hace unos días en AWS, tenía un montón de tokens en las Cookies. También lo implementé hace pocos días.

listo