不使用刷新令牌时:
1. 更改密码时:当用户更改密码时,请注意用户数据库中的更改密码时间,因此当更改密码时间大于令牌创建时间时,令牌无效。因此可以很快将其它的会话也给注销掉。
2. 当用户注销时:当用户注销时,将令牌保存在单独的数据库中(例如:InvalidTokenDB并在令牌过期时从Db中删除令牌)。因此,用户从相应的设备注销,他在其他设备中的会话保持不受干扰。
因此,在使JWT无效时,我遵循以下步骤:
检查令牌是否有效。
如果有效,请检查它是否存在于invalidTokenDB(存储注销令牌的数据库中,直到其到期时间)。
如果它不存在,则更改用户db中的密码时间并检查令牌创建时间。
如果更改密码时间<令牌创建时间,则令牌有效。
对于每个api请求,我需要遵循上述所有步骤,这可能会影响性能。
使用刷新令牌时:
访问令牌到期为1天,刷新令牌作为终身有效性或更长周期。
1.更改密码时:当用户更改密码时,请更改用户的刷新令牌。因此剩余的会话很快就会被注销。
2.当用户注销时:当用户注销时,将令牌保存在单独的DB中(例如:InvalidTokenDB并在令牌过期时从Db中删除令牌)。因此,用户从相应的设备注销,他在其他设备中的会话保持不受干扰。
因此,在使JWT无效时,我遵循以下步骤:
检查令牌是否有效
如果有效,请检查令牌是否存在于InvalidTokenDB中。
如果不存在,请使用userDB中的刷新令牌检查刷新令牌。
如果等于,则为有效令牌。
对于每个api请求,我需要遵循上述所有步骤,这可能会影响性能。
如何使刷新令牌无效,因为刷新令牌没有效力,如果黑客使用它,仍然认证是有效的,请求将始终成功。
不使用刷新令牌且访问令牌没有到期时:
当用户登录时,在其用户数据库中创建一个没有到期时间的登录令牌。
因此,在使JWT无效时,请按照以下步骤操作,
检索用户信息并检查令牌是否在他的用户数据库中,如果允许的话。
用户注销时,仅从其用户数据库中删除此令牌。
当用户更改其密码时,从他的用户数据库中删除所有令牌并要求他再次登录。
因此,使用这种方法,您不需要在数据库中存储注销令牌,直到它们到期,也不需要在更改上述情况下所需的密码时存储令牌创建时间。但是这种方法只有在您的应用程序具有不需要刷新令牌并且令牌没有到期的要求时才有效。
其它链文:
Best practices to invalidate JWT while changing passwords and logout in node.js? [closed]
基于 session 和基于 token 的用户认证方式到底该如何选择?
Cookie Session跨站无法共享问题(单点登录解决方案)