代码之家  ›  专栏  ›  技术社区  ›  hashchen

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

  •  0
  • hashchen  · 技术社区  · 2 年前

    我正在使用NextJS编写我的前端应用程序,并使用next-auth进行身份验证(电子邮件、密码登录)。我的后端是用GoLang编写的不同的代码库,所以当用户登录时,它会向GoLang后端端点发送一个请求,并返回一个JWT令牌,生成如下:

    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))
    

    我的问题与 NEXTAUTH_SECRET 我在Next Auth文档中看到的这个环境变量,正如你所看到的,当我在Go中生成令牌时,我使用这个 config.AppSecret (后端的env变量) nexttauth_SECRET 需要与相同的值 配置。AppSecret 从后端,我不确定有什么区别。

    提前感谢

    1 回复  |  直到 2 年前
        1
  •  1
  •   OM Bharatiya    2 年前

    简短的回答是,不 NEXTAUTH_SECRET 在Next.js和 config.AppSecret 在您的GoLang后端不需要相同;它们在应用程序堆栈中有不同的用途。

    nexttauth_SECRET :在Next.js中用于保护NextAuth令牌,这对NextAAuth框架内的会话安全至关重要。

    后端机密(config.AppSecret) :用于GoLang后端签署JWT代币,确保后端代币的完整性和真实性。

    如果您想在NextJs应用程序中使用后台生成的令牌,您应该执行以下操作:

    1. 存储令牌 :将令牌存储在客户端的安全位置。常见做法包括使用 localStorage , sessionStorage cookies 。我更喜欢使用Cookie,因为它们能够随每个请求自动发送,并且具有HttpOnly和SameSite属性等安全功能。

    2. 在后续请求中发送令牌: 向后端发出请求时,通常在Authorization标头中包含此令牌。标准的方法是使用Bearer模式,如下所示: Authorization: Bearer <your_token_here> .

    3. 令牌验证: 您的后端将在每个受保护的路由上验证此令牌,以验证请求。该令牌使用用于对其进行签名的相同密钥(config.AppSecret)进行解码。

    除此之外,您还需要处理令牌到期,使用https通道进行传输,并在使用cookie存储令牌的情况下实现CSRF保护。

    但是,如果您想保持前端和后端的身份验证机制分离且安全,您可以使用 nexttauth_SECRET 在您的Next.js应用程序中,以保护NextAuth会话和 配置。AppSecret 让您的GoLang后端安全地签署JWT代币。