Bienvenida e introducci贸n

1

Qu茅 aprender谩s sobre autenticaci贸n con OAuth

2

Stack de seguridad para aplicaciones modernas

3

Autenticaci贸n

4

Autorizaci贸n

JSON Web Tokens

5

JSON Web Tokens

6

Autenticaci贸n tradicional vs JWT

7

Configuraci贸n inicial de los proyectos

8

Firmando un JWT

9

Verificando nuestro JWT firmado y buenas practicas con JWT

10

Server-Side vs Client-Side sessions

11

Protegiendo nuestros recursos con JWT

12

Habilitando CORS en nuestro servidor

13

Profundizando el concepto de JWKS

OAuth 2.0

14

C贸mo elegir el flujo adecuado para OAuth 2.0

15

驴Qu茅 es OAuth 2.0?

16

Conociendo el API de Spotify

17

Creando los clientes de Spotify y servicios iniciales

18

Implementando Authorization Code Grant

19

Usando nuestro access token para obtener nuestros recursos

20

Implementando Implicit Grant

21

Implementando nuestro servicio de autenticaci贸n

22

Modificando nuestro Layout

23

Implementando Client Credentials Grant

24

Implementando Resource Owner Password Grant

25

Implementando Authorization Code Grant (PKCE)

Open ID Connect

26

驴Qu茅 es OpenID Connect?

27

Implementando OpenID Connect

Preocupaciones con JWT y OAuth 2.0

28

驴Cu谩les son las preocupaciones con JWT?

29

驴Cu谩les son las preocupaciones con OAuth 2.0?

Haciendo uso de Auth0

30

驴Qu茅 es Auth0?

31

Auth0 Lock y auth0.js

32

Universal Login

33

Social Login con Auth0

34

Custom Social connection con Spotify

35

Multifactor authentication

36

Authorization Extension en Auth0

Cierre del curso

37

Cierre del curso

Consideraciones para producci贸n

38

Buenas pr谩cticas para el despliegue en producci贸n

39

Uso de diferentes tenants para producci贸n con Auth0

Profundizando el concepto de JWKS

13/39

Lectura

Profundizando el concepto de JWKS

HS256 y R256 son dos de los algoritmos soportados para firmar JSON Web Tokens. El algoritmo HS256 genera una firma sim茅trica, esto quiere decir el secret/key se usa tanto para el firmado como para la verificaci贸n de la firma. Mientras que, el algoritmo RS256 genera una firma asim茅trica y en este caso es una llave privada la que se usa para el firmado y una llave publica es la que se usa para verificar la firma.

JWK es una especificaci贸n para representar las llaves criptogr谩ficas que se usan en el firmado de token usando RS256.

La especificaci贸n define dos estructuras de datos de alto nivel: JSON Web Key (JWK) y JSON Web key Set (JWKS).

JSON Web Key (JWK): Un objeto JSON que representa una llave criptogr谩fica. Las propiedades del objeto representan propiedades de la llave incluyendo su valor.

JSON Web key Set (JWKS): Un objeto JSON que representa un conjunto de JWKs. El objeto JSON debe tener una propiedad llamada keys que es la lista de JWKs.

Al nivel m谩s b谩sico el JWKS contiene las llaves publicas que deber铆an ser usadas para verificar un JWT generado por el Authorization Server.

Este es un ejemplo de como la respuesta de un endpoint que expone los JWKS:

{
  "keys": [
    {
      "alg": "RS256",
      "kty": "RSA",
      "use": "sig",
      "x5c": [
        "MIIC+DCCAeCgAwIBAgIJBIGjYW6hFpn2MA0GCSqGSIb3DQEBBQUAMCMxITAfBgNVBAMTGGN1c3RvbWVyLWRlbW9zLmF1dGgwLmNvbTAeFw0xNjExMjIyMjIyMDVaFw0zMDA4MDEyMjIyMDVaMCMxITAfBgNVBAMTGGN1c3RvbWVyLWRlbW9zLmF1dGgwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMnjZc5bm/eGIHq09N9HKHahM7Y31P0ul+A2wwP4lSpIwFrWHzxw88/7Dwk9QMc+orGXX95R6av4GF+Es/nG3uK45ooMVMa/hYCh0Mtx3gnSuoTavQEkLzCvSwTqVwzZ+5noukWVqJuMKNwjL77GNcPLY7Xy2/skMCT5bR8UoWaufooQvYq6SyPcRAU4BtdquZRiBT4U5f+4pwNTxSvey7ki50yc1tG49Per/0zA4O6Tlpv8x7Red6m1bCNHt7+Z5nSl3RX/QYyAEUX1a28VcYmR41Osy+o2OUCXYdUAphDaHo4/8rbKTJhlu8jEcc1KoMXAKjgaVZtG/v5ltx6AXY0CAwEAAaMvMC0wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUQxFG602h1cG+pnyvJoy9pGJJoCswDQYJKoZIhvcNAQEFBQADggEBAGvtCbzGNBUJPLICth3mLsX0Z4z8T8iu4tyoiuAshP/Ry/ZBnFnXmhD8vwgMZ2lTgUWwlrvlgN+fAtYKnwFO2G3BOCFw96Nm8So9sjTda9CCZ3dhoH57F/hVMBB0K6xhklAc0b5ZxUpCIN92v/w+xZoz1XQBHe8ZbRHaP1HpRM4M7DJk2G5cgUCyu3UBvYS41sHvzrxQ3z7vIePRA4WF4bEkfX12gvny0RsPkrbVMXX1Rj9t6V7QXrbPYBAO+43JvDGYawxYVvLhz+BJ45x50GFQmHszfY3BR9TPK8xmMmQwtIvLu1PMttNCs7niCYkSiUv2sc2mlq1i3IashGkkgmo="
      ],
      "n": "yeNlzlub94YgerT030codqEztjfU_S6X4DbDA_iVKkjAWtYfPHDzz_sPCT1Axz6isZdf3lHpq_gYX4Sz-cbe4rjmigxUxr-FgKHQy3HeCdK6hNq9ASQvMK9LBOpXDNn7mei6RZWom4wo3CMvvsY1w8tjtfLb-yQwJPltHxShZq5-ihC9irpLI9xEBTgG12q5lGIFPhTl_7inA1PFK97LuSLnTJzW0bj096v_TMDg7pOWm_zHtF53qbVsI0e3v5nmdKXdFf9BjIARRfVrbxVxiZHjU6zL6jY5QJdh1QCmENoejj_ytspMmGW7yMRxzUqgxcAqOBpVm0b-_mW3HoBdjQ",
      "e": "AQAB",
      "kid": "NjVBRjY5MDlCMUIwNzU4RTA2QzZFMDQ4QzQ2MDAyQjVDNjk1RTM2Qg",
      "x5t": "NjVBRjY5MDlCMUIwNzU4RTA2QzZFMDQ4QzQ2MDAyQjVDNjk1RTM2Qg"
    }
  ]
}

Cada una de las propiedades definida en cada JWK hacer parte de la especificaci贸n RFC 7517 Section 4 estos son algunos de los significados de las propiedades:

  • alg: es el algoritmo de la llave
  • kty: es el tipo de llave.
  • use: es como la llave ser谩 usada. En el ejemplo anterior significa que sera usado como una firma.
  • x5c: es la cadena de certificado x509.
  • kid: es un identificador 煤nico de la llave.

Verificando un JWT usando un endpoint JWKs

Para verificar un JWT usando JWKS estos son los pasos a grandes rasgos que se deben seguir:

  1. Obtener los JWKS del endpoint y filtrar las potenciales keys de firmado.
  2. Extraer el JWT del header del request de autorizaci贸n.
  3. Decodificar el JWT y obtener la propiedad kid del header.
  4. Encontrar la llave de firmado filtrada de los JWKS usando la propiedad kid.
  5. usar la propiedad x5cpara construir un certificado que es el que posteriormente se podr谩 usar para verificar la firma del JWT.

Generalmente estos pasos se hace usando alguna librer铆a que lo haga por nosotros. Aqu铆 tenemos un ejemplo de como implementar la lectura y verificaci贸n de un JWT usando JWKS en un servidor con Express.js:

const express = require("express");
const app = express();
const jwt = require("express-jwt");
const jwks = require("jwks-rsa");

const port = process.env.PORT || 8080;

const jwtCheck = jwt({
  secret: jwks.expressJwtSecret({
    cache: true,
    rateLimit: true,
    jwksRequestsPerMinute: 5,
    jwksUri: "<authorization-server-url>/.well-known/jwks.json"
  }),
  audience: "<api-indentifier>",
  issuer: "<authorization-server-url>",
  algorithms: ["RS256"]
});

app.use(jwtCheck);

app.get("/authorized", function(req, res) {
  res.send("Secured Resource");
});

app.listen(port);

Aportes 4

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Cuando me sumerjo en ver c贸mo funcionan las cosas, siempre me sorprendo de lo increible que es y este tema me ha dejado a煤n m谩s dudas.

Dejare el link donde he visto m谩s https://auth0.com/docs/tokens/concepts/jwks

Significa que con JWKS yo tambi茅n le podr铆a dar acceso a un tercero a que use mi llave p煤blica a la hora para validar JWTs que se hayan generado desde mi servicio?

Quiero creer que no es indispoensable conocer a profundidad de c贸mo funciona el c贸digo realizado aqui en Express, pues yo nunca he utilizado express y tampoco hay una explicaci贸n paso a paso de que hace el c贸digo- Pero si es claro el paso a paso de c贸mo verificar el JWT usando los JWKS (a grandes rasgos), porque del resto, pienso que una clase escrita explicando esto, no es lo mismo que un video del profesor explicandolo鈥

super pagina de informacion