nodejs(express)中的Auth0中间件给出错误:aggrinfo ENOTFOUND

时间:2017-06-08 14:17:12

标签: node.js linux express auth0

我在快速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。

3 个答案:

答案 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传输协议错误。 可能是一个非常简单的错误,可能是完全复杂的事情:

  • 主机系统上没有互联网连接
  • 主机系统缺少发送请求的权限
  • 客户端系统缺少接受请求的权限(例如,如果vpc阻止来自公共域),
  

错误:getaddrinfo ENOTFOUND undefined undefined:443

  • undefined undefined 表示未定义系统尝试连接的url。

我认为问题在于解析,因为显示的代码块正在评论你提供的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文档中看不出来。