【发布时间】:2021-03-02 07:38:48
【问题描述】:
我有一个 Api 和一个移动客户端。我正在使用如下刷新令牌:
- 用户提供凭据,Api 返回访问令牌和刷新令牌。然后将刷新令牌及其过期日期时间保存在数据库的用户表中。
- 客户端使用给定的访问令牌消耗一些受保护的资源。
- 访问令牌过期,因此客户端提供他的刷新令牌并获取新的令牌对。
- 第 2 步和第 3 步不断重复。
问题: 假设用户有 2 个设备,A 和 B。他使用设备 A 成功登录,所以他得到了 2 个令牌,他很高兴。一旦用户从设备 B 登录,Api 就会向他发送一对新的令牌,这意味着新的刷新令牌将覆盖已经给设备 A 的令牌。现在用户回到设备 A aaa 并且它消失了(无效刷新令牌!)所以他必须再次提供凭据,而我、用户和您都不想这样做。
建议: 我找到了两种解决问题的方法,但是因为我对这个主题很陌生,所以我看不出哪个是最佳实践:
方法 A: 为每个用户保存多个刷新令牌,并保存一个设备标识符(仍然不知道在移动、浏览器和桌面客户端等不同客户端类型的情况下到底是什么!)但无论如何。在这种方法中,当用户从设备 A 登录时,Api 会提供两个令牌。用户从设备 B 登录,Api 传递新的令牌对。他回到设备 A,再次使用他的第一个令牌(仍然有效)。
方法 B: 每个用户保留 1 个刷新令牌。当用户从设备 B 登录时,Api 会发回唯一的刷新令牌(只要用户提供有效的凭据,我就不应该关心设备,对吧?)
您能否指出每种方法的优缺点?
【问题讨论】:
标签: refresh-token