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

zaqlnxep  于 2023-04-20  发布在  其他
关注(0)|答案(2)|浏览(142)

我在我的Next.js应用中使用Auth0进行身份验证,并使用Express.js API后端。在我的本地环境中一切正常,但当我将应用部署到生产环境时,我遇到了身份验证问题。
当我在本地环境中向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
});

任何帮助将不胜感激。谢谢
我已经在两个环境中验证了我的env变量,一切似乎都很好(至少对我来说)。

**更新:**我注意到我的本地env中有一些有趣的东西。我已经将我的initAuth0中的所有process.env替换为我的.env文件的实际值。并且我删除了我的.env文件。auth连接已经建立,但我收到的是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需要。同样,这在本地工作,但在生产环境中不工作。

evrscar2

evrscar21#

在Nextjs中,由于env文件的安全性,如果你想在客户端获得一个env,你必须像这样将NEXT_PUBLIC放在每个env名称的第一位:
必须使用NEXT_PUBLIC_AUTH0_AUDIENCE而不是AUTH0_AUDIENCE

xxhby3vn

xxhby3vn2#

好吧,我已经找到了解决这个问题的方法,我将我的应用程序部署到Vercel而不是AWS Amplify。我没有更改配置中的任何内容,它工作了。
我真的很好奇,如果有人知道我在AWS上做错了什么。

相关问题