带有 JWT 的 Express API 返回“未经授权:算法无效错误”

Posted

技术标签:

【中文标题】带有 JWT 的 Express API 返回“未经授权:算法无效错误”【英文标题】:Express API with JWT returns "Unauthorized: Invalid Algorithm error" 【发布时间】: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? 【参考方案1】:

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

前期问题:

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

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

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

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

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

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

【讨论】:

以上是关于带有 JWT 的 Express API 返回“未经授权:算法无效错误”的主要内容,如果未能解决你的问题,请参考以下文章

无法使用带有 MEAN 堆栈的 express-jwt 在服务器端验证令牌

未找到授权令牌 - Express-JWT 和 Auth0

使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会引发未经授权的错误

在 Ocelot API 网关中间件中返回未授权

带有jwt的Angular 2 AuthHttp未连接

路由前的 Express-jwt 控制令牌