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 鈥渁 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