Yo lo hice en Python, usando Django y una libreria que se llama pyjwt
Bienvenida e introducción
Qué aprenderás sobre autenticación con OAuth
Stack de seguridad para aplicaciones modernas
Autenticación
Autorización
JSON Web Tokens
JSON Web Tokens
Autenticación tradicional vs JWT
Configuración inicial de los proyectos
Firmando un JWT
Verificando nuestro JWT firmado y buenas practicas con JWT
Server-Side vs Client-Side sessions
Protegiendo nuestros recursos con JWT
Habilitando CORS en nuestro servidor
Profundizando el concepto de JWKS
OAuth 2.0
Cómo elegir el flujo adecuado para OAuth 2.0
¿Qué es OAuth 2.0?
Conociendo el API de Spotify
Creando los clientes de Spotify y servicios iniciales
Implementando Authorization Code Grant
Usando nuestro access token para obtener nuestros recursos
Implementando Implicit Grant
Implementando nuestro servicio de autenticación
Modificando nuestro Layout
Implementando Client Credentials Grant
Implementando Resource Owner Password Grant
Implementando Authorization Code Grant (PKCE)
Open ID Connect
¿Qué es OpenID Connect?
Implementando OpenID Connect
Preocupaciones con JWT y OAuth 2.0
¿Cuáles son las preocupaciones con JWT?
¿Cuáles son las preocupaciones con OAuth 2.0?
Haciendo uso de Auth0
¿Qué es Auth0?
Auth0 Lock y auth0.js
Universal Login
Social Login con Auth0
Custom Social connection con Spotify
Multifactor authentication
Authorization Extension en Auth0
Consideraciones para producción
Buenas prácticas para el despliegue en producción
Uso de diferentes tenants para producción con Auth0
Cierre del curso
Cierre del curso
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
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
Yo lo hice en Python, usando Django y una libreria que se llama pyjwt
El reto lo intenté hacer lo más sencillo posible.
En este sitio generé las llaves públicas y privadas usando esta configuración, tambien las puedes generar “a palo”:
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
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
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.