Auth0 在本地环境生成JWT,在生产环境生成JWE Next

问题描述 投票:0回答:1

我在带有 Express.js API 后端的 Next.js 应用程序中使用 Auth0 进行身份验证。在我的本地环境中一切正常,但是当我将我的应用程序部署到生产环境时,我遇到了身份验证问题。

当我在本地环境中从 Auth0 请求访问令牌时,我收到了一个 JWT(JSON Web 令牌),它按预期工作。但是,当我在生产环境中从 Auth0 请求访问令牌时,我收到了一个 JWE(JSON Web 加密)令牌。这会导致身份验证问题,因为我的后端需要 JWT 令牌。

我已经仔细检查了我的环境变量和 Auth0 设置,但我找不到造成这种差异的原因。我如何确保 Auth0 在我的本地和生产环境中生成 JWT 访问令牌?

我的 jwt 在后端检查:

const { auth } = require('express-oauth2-jwt-bearer');
const jwtCheck = auth({
  audience: process.env.AUTH0_AUDIENCE,
  issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL,
  tokenSigningAlg: 'RS256'
});

我前面的auth0连接:

const auth0 = initAuth0({
    scope: 'openid profile email offline_access',
    audience: process.env.AUTH0_AUDIENCE,
    issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL,
    baseURL: process.env.AUTH0_BASE_URL,
    clientID: process.env.AUTH0_CLIENT_ID,
    clientSecret: process.env.AUTH0_CLIENT_SECRET,
    secret: process.env.AUTH0_SECRET
});

任何帮助将不胜感激。 谢谢

我已经在两个环境中验证了我的环境变量,一切似乎都很好(至少对我而言)。

更新: 我在本地环境中注意到一些有趣的事情。我已将 initAuth0 中的所有 process.env 替换为我的 .env 文件的实际值。我删除了我的 .env 文件。已建立身份验证连接,但我收到的是 JWE 而不是 JWT。这是我的生产问题。

const auth0 = initAuth0({
    scope: 'openid profile email offline_access',
    audience: "***",
    issuerBaseURL: "***",
    baseURL: "http://localhost:3000",
    clientID: "***",
    clientSecret: "***",
    secret: "****"
});

但是如果我在我的 .env 文件中添加 AUTH0_AUDIENCE="***" 并将所有值保留在 initAuth0 中(没有 process.env,只有实际值),我得到正确的 JWT 并且一切正常。同样,我说的是本地。

似乎在尝试使用 getAccessToken() 检索 JWT 时,AUTH0_AUDIENCE 会自动访问,因此 Auth0 需要它。同样,这在本地有效,但在生产中无效。

next.js jwt auth0
1个回答
0
投票

在 Nextjs 中,由于

env
文件的安全性,如果您想在客户端中获得
env
,您必须将
NEXT_PUBLIC
放在每个环境名称的前面,如下所示:

而不是

AUTH0_AUDIENCE
你必须使用
NEXT_PUBLIC_AUTH0_AUDIENCE

© www.soinside.com 2019 - 2024. All rights reserved.