【发布时间】:2021-12-06 19:52:55
【问题描述】:
我已经使用访问令牌、刷新令牌和刷新令牌轮换构建了一种身份验证。当用户登录时,系统会生成一个 JWT 令牌和一个 UUID 散列刷新令牌,然后将其刷新令牌 id 返回给用户。
初始化刷新令牌是一个 UUID 令牌,它使用bcrypt 对 uuid 令牌进行哈希处理,然后保存在数据库中。在数据库上,除了保存刷新令牌id和哈希令牌外,我还保存了它的过期日期、它的userId、活动状态和撤销的ip。
访问令牌在 Authentication 标头中作为 Bearer 令牌传递给 JWT 验证。当一个访问令牌过期时,它会使用旧的刷新令牌值及其 id 调用/refresh-token 以获取新的访问令牌和刷新令牌对。如果刷新令牌过期,我会要求用户重新登录。
我还有一个刷新令牌轮换方法来避免刷新令牌重用。当重新使用刷新令牌时,我将撤销并禁用属于该 userId 系列的所有刷新令牌。所以用户应该再次登录以获得新的访问令牌和刷新令牌对。
我知道OAuth2 是一个很好的协议来实现访问令牌和刷新令牌认证。使用我的身份验证设计,如何改进它以使用OAuth2?
【问题讨论】:
标签: authentication oauth-2.0 jwt access-token refresh-token