No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Tokens firmados y encriptados

12/13
Recursos

Aportes 7

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

馃洨锔 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}){},
}

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.

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

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 馃憦馃憦