Auth0 和 Graphql 出错 - 类型错误:无法读取未定义的属性"公钥"



我目前正在尝试通过Auth0为Graphql设置身份验证。我们面临的问题是在我们的身份验证突变中返回错误

validateAndParseIdToken.js:25
jwt.verify(idToken, key.publicKey, {
^
TypeError: Cannot read property 'publicKey' of undefined

我们已经验证了 idToken 是否正在由 validateAndParseIdToken 函数传入以进行解码

validateAndParseIdToken.js
const jwksClient = require('jwks-rsa')
const jwt = require('jsonwebtoken')
const jwks = jwksClient({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 1,
jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json`
})
const validateAndParseIdToken = (idToken) => new Promise((resolve, reject) => {
const { header, payload} = jwt.decode(idToken, {complete: true})
if (!header || !header.kid || !payload) reject(new Error('Invalid Token'))
jwks.getSigningKey(header.kid, (err, key) => {
if (err) reject(new Error('Error getting signing key: ' + err.message))
jwt.verify(idToken, key.publicKey, { algorithms: ['RS256'] }, (err, decoded) => {
if (err) reject('jwt verify error: ' + err.message)
resolve(decoded)
})
})
})
module.exports = validateAndParseIdToken
authenticate mutation -
const Mutation = {
async authenticate(parent, { idToken }, ctx, info) {
let userToken = null
try {
userToken = await validateAndParseIdToken(idToken)
} catch (err) {
throw new Error(err.message)
}
const auth0id = userToken.sub.split('|')[1]
let user = await ctx.prisma.query.user({ where: { auth0id } }, info)
if (!user) {
user = createPrismaUser(ctx, userToken)
}
return user
},

期望的流程是检查idToken,如果它有效,则检查该用户的数据库中是否存在用户,如果不是,则创建该用户。

迟到的回复...

在将ApolloServer部署到Heroku时遇到同样的问题。

将 AUTH0_DOMAIN="xxx" 和 API_IDENTIFIER="xxx" 添加到 Heroku 配置变量列表中是有效的。(即使用本地 .env 文件中的值(

最新更新