authentication - 如何改进基于 Oauth2 协议(protocol)身份验证的 JWT 访问 token 和刷新 token ?

标签 authentication oauth-2.0 jwt access-token refresh-token

我使用访问 token 、刷新 token 和刷新 token 轮换构建了一种身份验证。当用户登录时,系统会生成一个 JWT token 和一个 UUID 哈希刷新 token 及其刷新 token ID,然后返回给用户。

初始化刷新 token 是一个 UUID token ,它使用 bcrypt 对 uuid token 进行哈希处理,然后保存在数据库中。在数据库中,除了保存刷新 token id和哈希 token 之外,我还保存了它的过期日期、它的userId、事件状态和撤销的ip。

访问 token 在 Authentication header 中传递,作为 JWT 验证的 Bearer token 。当一个访问 token 过期时,它会使用旧的刷新 token 值及其 ID 调用 /refresh-token 来获取新的访问 token 和刷新 token 对。如果刷新 token 过期,我会要求用户重新登录。

我还有一个刷新 token 轮换方法,以避免刷新 token 重复使用。当重复使用刷新 token 时,我将撤销并禁用属于该 userId 系列的所有刷新 token 。因此用户应该再次登录以获取新的访问 token 和刷新 token 对。

我知道OAuth2是一个很好的协议(protocol)来实现访问 token 和刷新 token 身份验证。对于我的身份验证设计,如何改进它以使其与 OAuth2 兼容?

最佳答案

听起来您的 UUID 具有客户端刷新 token 的所有功能。如果客户端是浏览器,则它永远不会收到刷新 token - 安全 cookie 被认为更好。

我建议的主要做法是使用授权服务器并遵循有关 API、网络和移动应用程序的标准指南。

OAuth 提供了许多安全设计模式。了解网络和移动客户端的具体情况是值得的。还要考虑与安全相关的功能,例如审核发行的代币。

以下是我工作的 Curity 提供的一些资源。这里的概念适用于任何提供商 - 重要的是原则:

关于authentication - 如何改进基于 Oauth2 协议(protocol)身份验证的 JWT 访问 token 和刷新 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69638425/

相关文章:

spring - 如何在docker容器中配置spring cloud oauth2

spring-boot - 使用 'spring-boot-starter-oauth2-resource-server' 设置资源服务器时,JwtDecoder bean 不会自动注入(inject)

c# - Identity Server 4 - 角色策略不起作用

authentication - ADFS 作为 OAuth2 提供者/身份验证服务器可能吗?

session - Yii2 Advanced 应用程序,带有子域的前端和后端的不同 session

PHP登录Facebook创建无限重定向循环

authentication - 在Grails应用程序中针对TOTP或其他多因素身份验证的完美解决方案?

swift - Facebook Account Kit SDK 给出无效的 OAuth 2.0 错误

asp.net-core - uri 查询参数中的 asp.net core JWT?

authentication - 如何在 Flutter 应用中集成 Azure AD SSO