我想知道在更改密码/注销时在不点击db的情况下使JWT失效的最佳实践.
我有下面的 idea ,通过点击用户数据库来处理以上两种情况.
1.如果密码发生更改,我会判断存储在用户数据库中的密码(哈希).
2.在注销的情况下,我将上次注销时间保存在用户数据库中,因此通过比较令牌创建时间和注销时间,我可以使此情况无效.
但这两种情况的代价是,用户每次点击api时都会点击用户db.任何最佳实践都将不胜感激.
UPDATE:
我想知道在更改密码/注销时在不点击db的情况下使JWT失效的最佳实践.
我有下面的 idea ,通过点击用户数据库来处理以上两种情况.
1.如果密码发生更改,我会判断存储在用户数据库中的密码(哈希).
2.在注销的情况下,我将上次注销时间保存在用户数据库中,因此通过比较令牌创建时间和注销时间,我可以使此情况无效.
但这两种情况的代价是,用户每次点击api时都会点击用户db.任何最佳实践都将不胜感激.
UPDATE:
When No Refresh token is used:
1.While changing password:当用户更改密码时,请在用户数据库中记录更改密码时间,因此当更改密码时间大于令牌创建时间时,令牌无效.因此,剩余的会话将很快注销.
2.When User logs out:当用户注销时,将令牌保存在单独的数据库中(例如:InvalidTokenDB,并在令牌过期时从数据库中删除令牌).因此,用户从相应的设备注销,他在其他设备中的会话保持不变.
因此,在使JWT失效时,我遵循以下步骤:
Concern with the above method:
When Refresh token is used:,访问令牌到期日为1天,刷新令牌为终身有效期
1. While changing password:当用户更改密码时,更改用户的刷新令牌.因此,剩余的会话将很快注销.
2. When User logs out:当用户注销时,将令牌保存在单独的数据库中(例如:InvalidTokenDB,并在令牌过期时从数据库中删除令牌).因此,用户从相应的设备注销,他在其他设备中的会话保持不变.
因此,在使JWT失效时,我遵循以下步骤:
Concern with the above method:
Note:虽然汉兹提出了一种在Using Refesh Token in Token-based Authentication is secured?中保护刷新令牌的方法,但我无法理解他在说什么.感谢您的帮助.
因此,如果有人有好的建议,欢迎发表 comments .
UPDATE:
When No Refresh token needed and no expiry of access tokens:
当用户登录时,在他的用户数据库中创建一个没有过期时间的登录令牌.
因此,在使JWT失效时,请遵循以下步骤:,
因此,使用这种方法,您不需要在注销令牌到期之前将其存储在数据库中,也不需要在更改密码时存储令牌创建时间,而在上述情况下需要更改密码.然而,我相信这种方法只有在你的应用程序有不需要刷新令牌和令牌不过期的要求时才有效.
如果有人对这种方法有意见,请告诉我.欢迎 comments :)