No tienes acceso a esta clase

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

Tokens firmados y encriptados

12/13
Recursos

Aportes 3

Preguntas 2

Ordenar por:

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

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.

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

🛩️ 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}){},
}