Maison  >  Article  >  développement back-end  >  La variable NEXTAUTH_SECRET est-elle la même que le secret backend utilisé pour générer le jeton JWT ?

La variable NEXTAUTH_SECRET est-elle la même que le secret backend utilisé pour générer le jeton JWT ?

王林
王林avant
2024-02-08 23:09:09817parcourir

NEXTAUTH_SECRET 变量与用于生成 JWT 令牌的后端机密相同吗?

php Editeur Apple, bonjour ! Concernant votre question, la variable NEXTAUTH_SECRET est différente du secret backend utilisé pour générer le token JWT. NEXTAUTH_SECRET est la clé utilisée dans NextAuth.js pour chiffrer le cookie de session, et le secret backend est la clé utilisée pour vérifier et signer le jeton JWT. Bien que les deux clés soient utilisées dans une certaine mesure pour sécuriser l’authentification des utilisateurs, leur rôle et la manière dont elles sont utilisées sont différents. Assurez-vous de configurer et de protéger correctement ces clés lorsque vous utilisez NextAuth.js et JWT pour garantir la sécurité de votre application. j'espère que cela vous sera utile ! Si vous avez d'autres questions, n'hésitez pas à poursuivre la consultation.

Contenu de la question

J'écris une application frontale utilisant NextJS et j'utilise l'authentification suivante pour l'authentification (e-mail, mot de passe de connexion). Mon backend est une base de code différente écrite en GoLang, donc lorsqu'un utilisateur se connecte, il envoie une requête au point de terminaison du backend Golang et renvoie un jeton JWT, qui est généré comme ceci :

config := config.GetConfig()
atClaims := jwt.MapClaims{}
atClaims["authorized"] = true
atClaims["id"] = userId
atClaims["email"] = email
atClaims["exp"] = time.Now().Add(time.Hour * 24 * time.Duration(config.LoginExpire)).Unix()

token := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
signedToken, err := token.SignedString([]byte(config.AppSecret))

Mon problème est le même avec la valeur de NEXTAUTH_SECRET 这个环境变量有关,我从 Next Auth 文档中看到,正如你在 Go 中生成令牌时看到的那样,我使用这个 config.AppSecret (后端的环境变量),NEXTAUTH_SECRET 需要吗与后端的 config.AppSecret et je ne sais pas quelle est la différence.

Merci d'avance

Solution de contournement

La réponse courte est non. Les NEXTAUTH_SECRET 和 GoLang 后端中的 config.AppSecret dans Next.js n'ont pas besoin d'être identiques ; ils servent à des fins différentes dans votre pile d'applications.

NEXTAUTH_SECRET : utilisé dans Next.js pour sécuriser les jetons NextAuth, qui sont essentiels à la sécurité des sessions dans le cadre NextAuth.

Backend Secret (config.AppSecret) : utilisé dans le backend GoLang pour signer les jetons JWT, garantissant l'intégrité et l'authenticité du jeton backend.

Si vous souhaitez utiliser des jetons générés par le backend dans votre application NextJs, vous devez procéder comme suit :

  1. Store Token : stockez le jeton dans un emplacement sécurisé côté client. Les pratiques courantes incluent l'utilisation de localStoragesessionStoragecookies. Je préfère utiliser des cookies car ils sont automatiquement envoyés à chaque demande et disposent de fonctionnalités de sécurité telles que les propriétés HttpOnly et SameSite.

  2. Envoyer un jeton lors des demandes ultérieures : lorsque vous effectuez des demandes au backend, incluez généralement ce jeton dans l'en-tête d'autorisation. L'approche standard consiste à utiliser l'architecture Bearer, comme indiqué ci-dessous : Authorization: Bearer 533909f4aa8ebe9c62b1cb74382fe2ac.

  3. Validation du jeton : Votre backend validera ce jeton sur chaque route protégée pour authentifier les demandes. Le jeton est décodé à l'aide de la même clé (config.AppSecret) utilisée pour la signature.

En plus de cela, vous devez également gérer l'expiration des jetons, utiliser un canal https pour la transmission et mettre en œuvre une protection CSRF si vous utilisez des cookies pour stocker des jetons.

Cependant, si vous souhaitez conserver les mécanismes d'authentification front-end et back-end séparés et sécurisés, vous pouvez utiliser NEXTAUTH_SECRET 来保护 NextAuth 会话,并为 GoLang 后端使用 config.AppSecret pour signer en toute sécurité les jetons JWT dans votre application Next.js.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer