带有 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 在服务器端验证令牌