使用JWT的Express API返回"未授权:无效的算法错误"

时间:2017-08-17 22:28:52

标签: reactjs express jwt superagent express-jwt

我已经编写了一个简单的React应用程序,遵循稍微过时的教程的说明,该教程旨在显示侧栏中的联系人列表,其中各个联系人数据显示在索引组件中,但仅限于您有通过登录到Auth0组件并将JSON Web令牌保存在本地存储中进行身份验证。我已经确认我已登录并拥有令牌。到目前为止,一切都很顺利。

当我点击侧边栏中的联系人查看该联系人的数据时会出现问题,该数据来自使用Express设置的非常基本的API。我一直在使用Postman进行故障排除,因为我从应用程序获得的唯一错误是" 401:未经授权"

当我点击我的端点时,使用"承载[JWT_VALUE_HERE]"提供授权标头。邮递员回应" UnauthorizedError:无效算法"

完整输出

UnauthorizedError: invalid algorithm
            
   at /Users/Arkham/Documents/Web/eldrac/react-auth-server/node_modules/express-jwt/lib/index.js:102:22
   at /Users/Arkham/Documents/Web/eldrac/react-auth-server/node_modules/jsonwebtoken/verify.js:27:18
   at _combinedTickCallback (internal/process/next_tick.js:95:7)
   at process._tickCallback (internal/process/next_tick.js:161:9)

我已经完成了一些谷歌搜索和调整我的Auth0客户端设置,特别是算法设置,但无论我设置它(我的选项是RS256和HS256),它似乎没有做差异。我很想过去。

我使用Superagent提出我的请求

getContact: (url) => {
    return new Promise((resolve, reject) => {
      request
        .get(url)
        .set('Authorization', 'Bearer ' + AuthStore.getJwt())
        .end((err, response) => {
          if (err) reject(err);
          resolve(JSON.parse(response.text));
        })
    });
  }

这似乎有效。我已经确认url是正确的,并且AuthStore.getJwt()正在提供正确的参数。

1 个答案:

答案 0 :(得分:0)

您的问题没有提供诊断问题所需的大量信息 - 首先,您应该向API发送JWT访问令牌,而不是您的Id令牌。

前期问题:

  • 您是否在Auth0仪表板中定义了API?

  • 进行身份验证时,是否使用了受众参数?它是 可能是访问令牌正在使用RS256。请记住访问权限 token和Resource API,它是控制算法的API, 不是客户。

  • 您的API用于验证令牌的算法是什么?

  • 据推测,您的代码段中的url就是这样的 http://localhost:3001/myendpoint

获取您的令牌,并将其粘贴到https://jwt.io以查看算法使用的内容。将其与用于验证令牌的内容进行比较。

在您提供更多信息时,请在此处更新我的答案 - 请使用评论部分获取此答案。