No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Tokens firmados y encriptados

12/13
Recursos

Aportes 8

Preguntas 3

Ordenar por:

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

🛩️ Tokens firmados y encriptados

Apuntes

  • Una de las formas más efectivas de proteger su contenido y que no pueda ser alterado es tener mayor control de la firma y encriptación del token

Tokens Firmados y Encriptados

Firmar y encriptar es otra forma de limitar la exposición de datos

  • Porque estamos agregando una capa adicional de seguridad

En Next Auth

⚠️ Genera un secreto (SHA) a partir de la configuración

  • En el momento que la configuración cambie el secreto cambia

⚠️ A partir del secreto crea una llave HMAC para firmar el token. SHA512 por defecto

⚠️ El token no es encriptado. A256GCM por defecto

¿Qué cifrado elijo?

  • Asimétrico (RSA)
    • Dos tokens: privado (para el servidor) y público (para el cliente)
    • Cuando no hay control de clientes que usan los tokens
    • Auth0 utiliza tokens asimétricos
  • Simétrico (HMAC)
    • Cunado hay control
// Si quisiera otro algoritmo para firmar ...
jwt: {
	verificationOptions: {
		algoritms: ["HS256"]
	},
}
// Si quisiera otro algoritmo para encriptar ...
jwt: {
	// decryptionKey = encryptionKey
	decryptionOptions: {
		algoritms: ["A256GCM"]
	},
}
// Si quisiera otro algoritmo para encriptar ...
jwt: {
	async encode({secret, token, maxAge}){},
	async decode({secret, token, maxAge}){},
}

Ahora mismo secret es una variable aparte de jwt en, la documentación de nextauth recomienda que se genere en linux con

openssl rand -base64 32

se guarde en la variable NEXTAUTH_SECRET y, aunque ya la libreria directamente la reconoce, para el archivo de configuracion de next-auth, se puede llamar desde alli con process.env.NEXTAUTH_SECRET
Además, esta variable es absolutamente necesaria en producción
https://next-auth.js.org/configuration/options#secret

Sobre JWT, la documentación indica el formato que debe tener en el archivo de configuración de next-auth, siempre y cuando la session.strategy='jwt’
https://next-auth.js.org/configuration/options#jwt

Ejemplo práctico

Se crea un secreto y una llave de autenticación para poder generar el JWT.

Para le encriptación se puede generar otra llave.

Cifrados

  • Simétrico (HMAC): De una sola llave.
  • Asimétrico (RSA): De dos llaves (ejemplo ssh).

¿Cuándo usar uno u otro?

  • Cuándo se requiere tener acceso a la desencriptación desde el front end o cuando no se tiene gobierno del front y el back end a la vez, se recomienda el uso de cifrados asimetricos (para solo exponer la llave publica y no la privada).
  • Si no se requiere desencriptar en el front es suficiente con un cifrado simétrico.

Algo muy curioso que me paso con este curso en particular
es que yo en cursos anteriores actualice todas las dependencias a la ultima version
next13, react18
materialui a la version 5 etc
me costo un poco pero logre que funcionara
pero con next-auth 4
el inicio de sesion no funcionaba apropiadamente y justo despues de implementar los jwt token en esta clase todo empezo a funcionar perfectamente
es algo curioso la verdad

Esta clase esta buena, como pentester esta clase tiene poder.

Esta es una página alternativa online para generar hashes: https://w3codegenerator.com/generators/hash-generator

Siguiendo la clase: Ingresan una string random, eligen SHA256, y generan un Hash para obtener un AUTH_JWT_SECRET seguro

Excelente clase!, estuve buscando mucho tiempo encriptar el jwt 👏👏

Excelente curso, muchas gracias por la información :D