我在快速API中使用中间件来验证auth0
const checkJwt = jwt({
// Dynamically provide a signing key based on the kid in the header and the singing keys provided by the JWKS endpoint.
secret: jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json`
}),
// Validate the audience and the issuer.
audience: process.env.AUTH0_AUDIENCE,
issuer: `https://${process.env.AUTH0_DOMAIN}/`,
algorithms: ['RS256']
});
...
server.use('/api', checkJwt, routes);
它适用于我的本地开发机器,但是当我在生产中运行时,我得到:
Error: getaddrinfo ENOTFOUND undefined undefined:443
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
我在生产中运行ubuntu 12,在dev上运行mac。
答案 0 :(得分:3)
您似乎忘了在生产系统上设置AUTH0_DOMAIN
环境变量。
根据github,
中的示例,您的代码是正确的但是在这个例子中有一节如何在很多环境变量设置的情况下运行这段代码。
DEBUG=express,jwks JWKS_HOST=https://my-authz-server AUDIENCE=urn:my-resource-server ISSUER=https://my-authz-server/ node server.js
。
请在启动应用程序之前检查您的生产配置。
答案 1 :(得分:3)
getaddrinfo ENOTFOUND
这是在请求的服务器地址无法连接时出现的基本Internet传输协议错误。 可能是一个非常简单的错误,可能是完全复杂的事情:
错误:getaddrinfo ENOTFOUND undefined undefined:443
我认为问题在于解析,因为显示的代码块正在评论你提供的uri,请试试这个:
const uri = "https:\/\/"+${process.env.AUTH0_DOMAIN}+"/.well-known/jwks.json"
const checkJwt = jwt({
// Dynamically provide a signing key based on the kid in the header and the singing keys provided by the JWKS endpoint.
secret: jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: uri
}),
// Validate the audience and the issuer.
audience: process.env.AUTH0_AUDIENCE,
issuer: `https://${process.env.AUTH0_DOMAIN}/`,
algorithms: ['RS256']
});
jwt选项中发行人的类似编辑
答案 2 :(得分:0)
确保AUTH0_DOMAIN env变量没有https://前缀。
这引起了我的注意,但是从Auth0文档中看不出来。