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

Consideraciones para producción

37

Buenas prácticas para el despliegue en producción

38

Uso de diferentes tenants para producción con Auth0

Cierre del curso

39

Cierre del curso

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Protegiendo nuestros recursos con JWT

11/39
Recursos

Actualmente utilizamos dos algoritmos de cifrado para proteger nuestros JWT: RS256, donde necesitamos una llave publica y una privada para validar la información desde el servidor y el cliente (utiliza la RSA Signature con SHA-256), y HS256, donde tenemos un poco menos de seguridad ya que, utilizamos a misma llave para generar y validar los tokens (utiliza el HMAC también con SHA-256).

Aportes 18

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Yo lo hice en Python, usando Django y una libreria que se llama pyjwt

El reto lo intenté hacer lo más sencillo posible.

  1. En este sitio generé las llaves públicas y privadas usando esta configuración, tambien las puedes generar “a palo”:

  2. Modifico el API de esto:

app.post("/api/auth/token", function(req, res) {
  const { email, username, name } = req.body;
  const token = jwt.sign({ sub: username, email, name }, config.authJwtSecret);
  res.json({ access_token: token });
});

a esto

app.post("/api/auth/token", function(req, res) {
  const { email, username, name } = req.body;
  const token = jwt.sign({ sub: username, email, name }, config.jwtPrivateKey, { algorithm: 'RS256'});
  res.json({ access_token: token });
});

A que se refiere con tener control sobre los clientes, el cliente es el navegador de un usuario no? como vas a tener control sobre su navegador…

listo! https://github.com/ismaelviss/oauth2
me base en parte de los ejemplos detallados en otros comentarios.

RS256
Jason Web Key Set
https://YOUR_DOMAIN/.well-known/jwks.json

https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-sets

Challenge completado, no utilice bodyparser ya que se encuentra deprecated

https://github.com/ronmiand/jwt-api-js

Cuando se hace la decodificacion en https://jwt.io/ lee que el algoritmo es RS256 y en la parte de VERYFY SIGNATURE da opcion de poner las dos llaves dependiendo el caso:

Public Key or Certificate. Enter it in plain text only if you want to verify a token
,
Private Key. Enter it in plain text only if you want to generate a new token. The key never leaves your browser.

Cuándo usar el algoritmo HS256 o RS256

Este es el standard que se menciona
https://tools.ietf.org/html/rfc7517#section-4

Se puede usar un encriptado SHA512?

Cuándo usar HS256 o RS256

OK nadie ha hecho el reto. veamos cuanto me demoro

Como se hace con un api, que se require consumir por los mobiles, apple, google etc, com se hace uso del Cors …?

haber me dicen si mi idea esta correctamente de los jwt simetricos y asimetricos

los simetricos es la misma llave del lado del cliente y del lado del servidor por ejemplo una api rest que esta alimentando varios tipos de clientes como lo seria
una app en (android,ios) un website … etc a esto te refieres cuando mencionas le del cliente osea que tu eres dueño de cliente / servidor

los asimetricos es para que no tengas que darle a tus clientes osea a los que generaron las apps de (android,ios) el website o que estan cosumiendo tus servicios tu clave privada … lo que haces es generar una clave privada con la que generas los tokens y una clave publica a los que usaran tus servicios asi no hay riesgo de que alguien mas genere tus tokens

o me equivoco ?

Si en el ejemplo anterior con la aplicación express hicimos uso de una generación de token simétrica (debido a que utilizamos sólo un JWT Secret), ¿en qué momento es este secret comprometido al cliente? Entiendo que este secret es únicamente manejado por el servidor y se hashea al generar el token, por ejemplo al no pasarle ningún algoritmo de firmado y guiandome por lo que dice jwt.io se utiliza HMACSHA256. Es decir que es básicamente imposible saber mi secret teniendo el token. O me equivoco?

Pueden generar sus llaves desde la terminal con openssl:

> openssl genrsa -out key.pem 1024
> openssl rsa -in key.pem -outform PEM -pubout -out public.pem

Siento que en todo caso sería mucho mejor y más útil usar un algoritmo asimétrico para evitar cualquier peligro, aun si tú tienes control del cliente