【问题标题】:Express API with JWT returns "Unauthorized: Invalid Algorithm error"带有 JWT 的 Express API 返回“未经授权:算法无效错误”
【发布时间】:2018-01-26 12:03:12
【问题描述】:

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

当我单击边栏中的联系人以查看该联系人的数据时,问题就开始了,这些数据来自使用 Express 设置的非常基本的 API。我一直在使用 Postman 进行故障排除,因为我从应用程序中得到的唯一错误是“401:未经授权”

当我到达端点时,使用“Bearer [JWT_VALUE_HERE]”提供授权标头,邮递员以“UnauthorizedError:无效算法”响应

完整输出

UnauthorizedError: 无效算法
            
  在 /Users/Arkham/Documents/Web/eldrac/react-auth-server/node_modules/express-jwt/lib/index.js:102:22
  在 /Users/Arkham/Documents/Web/eldrac/react-auth-server/node_modules/jsonwebtoken/verify.js:27:18
  在 _combinedTickCallback (internal/process/next_tick.js:95:7)
  在 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() 提供了正确的参数。

【问题讨论】:

  • Bryan - 你看到我的回答了吗 - 任何 cmets?

标签: reactjs express jwt superagent express-jwt


【解决方案1】:

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

前期问题:

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

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

  • 您的 API 使用什么算法来验证令牌?

  • 大概,您的代码 sn-p 中的 url 类似于 http://localhost:3001/myendpoint?

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

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

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2018-11-05
    • 2019-08-05
    • 2020-03-29
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2017-10-18
    相关资源
    最近更新 更多