我试图使用Auth0发出JWT令牌来访问我的API(以便Auth0处理所有OAuth和安全问题,等等,而我的API只需要检查令牌即可)。当我尝试测试客户端的授权码流以接收访问令牌(使用Node + Express)时,会发生以下情况:


授权代码请求工作正常,并且将客户端附加到查询后的代码重定向到我的redirect_uri。都好。
令牌请求然后总是失败。如果我包含audience参数,则请求将返回带有以下详细信息的access_denied错误:Service not found: {the audience parameter},无论我为audience参数设置了什么值。
如果不包含audience参数,则会显示server_error和消息Service not found: https://oauth.auth0.com/userinfo


我已经检查了每个Auth0设置并彻底阅读了每个文档页面,到目前为止,什么都没有起作用。我还在Auth0的API调试器中测试了授权代码流,并且工作正常。我的测试遵循完全相同的参数,但仍然收到请求令牌的错误。我正在本地主机上测试。客户端凭据和隐式流程运行正常。

这是我创建的测试端点,该端点从Auth0检索授权代码:



const qs = require('querystring');

const getCode = (req, res) => {
  const params = {
    audience,                            // the value of the API Audience setting for the client
    client_id,                           // the client ID
    redirect_uri,                        // the redirect_uri, which is also listed in the Allowed Callback URLs field
    response_type: `code`,
    scope:         `offline_access open` // ask to return ID token and refresh token,
    state:         `12345`,
  };

  const authDomain = `mydomain.auth0.com/oauth`;

  res.redirect(`${authDomain}/oauth/authorize?${qs.stringify(params)}`);

};





然后,redirect_uri重定向到以下端点,在该端点上我请求访问令牌:



const https = require('https');

const callback = (req, res) => {

  const body = {
    client_id,
    client_secret,
    code:          req.query.code,
    grant_type:    `authorization_code`,
    redirect_uri,  // same value as provided during the code request
  };

  const opts = {
    headers:  { 'Content-Type': `application/json` },
    hostname: `mydomain.auth0.com`,
    method:   `POST`,
    path:     `/oauth/token`,
  };

  const request = https.request(opts, response => {
    let data = ``;
    response.on(`data`, chunk => { data += chunk; });
    response.on(`error`, res.send(err.message));
    response.on(`end`, () => res.json(JSON.parse(data))); // this executes, but displays the error returned from Auth0
  });

  request.on(`error`, err => res.send(err.message));
  request.end(JSON.stringify(body), `utf8`);

};





关于我可能做错了什么的建议?

最佳答案

问题是我在Auth0处调用了错误的URL。我错误地认为授权和令牌端点都以/oauth开头,而实际上授权端点只是/authorize,而令牌端点是/oauth/authorize。更正我代码中的URL可以解决此问题。

关于node.js - Auth0“找不到服务”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43433085/

10-12 02:25