在 feathersjs 中使用 JWT 进行身份验证和会话处理

Posted

技术标签:

【中文标题】在 feathersjs 中使用 JWT 进行身份验证和会话处理【英文标题】:Authentication and session handling using JWT in feathersjs 【发布时间】:2020-05-15 20:08:47 【问题描述】:

我们正在使用 feathersjs - https://feathersjs.com/ 一个用于实时应用程序和 REST API 的框架。 用户名密码是身份提供者,我们用于 JWT 身份验证。

我们可以使用 JWT 创建访问令牌,参考链接 - https://docs.feathersjs.com/guides/basics/authentication.html 此 accessToken 现在可用于其他需要通过发送 Authorization: Bearer HTTP 标头进行身份验证的 REST 请求。

如前所述,默认情况下,Feathers 存储在 JWT 有效负载中的唯一内容是用户 ID。它是一个有状态的令牌,但在 JWT 有效负载中找不到任何相同的引用。

我们还能够使用链接撤销 JWT 访问令牌 - https://docs.feathersjs.com/cookbook/authentication/revoke-jwt.html 我们也在使用 redis。

现在的问题是这个 JWT 访问令牌存储在哪里,这个 JWT 是无状态的还是有状态的。

如果这个 JWT 是有状态的,我们是否真的需要在我们的节点 js 应用程序中维护会话,或者这个 JWT 就足够了。 别的 如果这个 JWT 是无状态的,我们如何在 node js 应用程序中维护会话。

甚至找不到任何与刷新令牌相关的参考。

谢谢。

【问题讨论】:

【参考方案1】:

使用 JWT 时没有会话,无需进行任何会话处理(请参阅this FAQ entry for more information)。客户端必须将其存储在某个地方(并删除它以注销)。

这里的有状态只是意味着在发出经过身份验证的请求时,还有一个额外的请求来获取当前用户信息。用户 ID 存储在令牌的sub (subject) claim 中。您可以在编码令牌时看到它(例如使用jtw.io)。如何创建不请求获取用户信息的无状态令牌也是documented in the cookbook但通常没有必要。

【讨论】:

感谢达夫的回复。现在对 Feathersjs 身份验证的理解已经很清楚了。目前正在调查Revoking JWT's

以上是关于在 feathersjs 中使用 JWT 进行身份验证和会话处理的主要内容,如果未能解决你的问题,请参考以下文章

Feathersjs - 如何创建自定义身份验证

如何使用 FeathersJS 检查服务器中的用户身份验证?

在 Django 中使用 JWT 进行身份验证

在 Django 中使用 JWT 令牌进行身份验证

使用 jwt 在微服务中进行身份验证

使用 passport-jwt 进行 JWT 身份验证不考虑到期日期