【问题标题】:Refresh tokens on multiple devices在多个设备上刷新令牌
【发布时间】:2021-03-02 07:38:48
【问题描述】:

我有一个 Api 和一个移动客户端。我正在使用如下刷新令牌:

  1. 用户提供凭据,Api 返回访问令牌和刷新令牌。然后将刷新令牌及其过期日期时间保存在数据库的用户表中。
  2. 客户端使用给定的访问令牌消耗一些受保护的资源。
  3. 访问令牌过期,因此客户端提供他的刷新令牌并获取新的令牌对。
  4. 第 2 步和第 3 步不断重复。

问题: 假设用户有 2 个设备,A 和 B。他使用设备 A 成功登录,所以他得到了 2 个令牌,他很高兴。一旦用户从设备 B 登录,Api 就会向他发送一对新的令牌,这意味着新的刷新令牌将覆盖已经给设备 A 的令牌。现在用户回到设备 A aaa 并且它消失了(无效刷新令牌!)所以他必须再次提供凭据,而我、用户和您都不想这样做。

建议: 我找到了两种解决问题的方法,但是因为我对这个主题很陌生,所以我看不出哪个是最佳实践:

方法 A: 为每个用户保存多个刷新令牌,并保存一个设备标识符(仍然不知道在移动、浏览器和桌面客户端等不同客户端类型的情况下到底是什么!)但无论如何。在这种方法中,当用户从设备 A 登录时,Api 会提供两个令牌。用户从设备 B 登录,Api 传递新的令牌对。他回到设备 A,再次使用他的第一个令牌(仍然有效)。

方法 B: 每个用户保留 1 个刷新令牌。当用户从设备 B 登录时,Api 会发回唯一的刷新令牌(只要用户提供有效的凭据,我就不应该关心设备,对吧?)

您能否指出每种方法的优缺点?

【问题讨论】:

    标签: refresh-token


    【解决方案1】:

    方法 A 是处理此问题的正常方法。访问/刷新令牌不应在不同的会话/设备之间共享。

    每个人都应该得到自己的一双。当您使用refresh_token 操作时,它应该只使与该请求一起使用的刷新令牌过期,而不是任何不相关的令牌。

    【讨论】:

    • 那我应该保留什么样的设备标识符?特别是如果我有多个不同类型的客户?
    • 我不知道你所说的设备标识符是什么意思,或者在这个问题的上下文中是什么意思。
    • 如果我想保留几个刷新令牌并且每个都用于一个唯一的设备,我应该如何识别每个设备?
    • 令牌不能识别设备吗?只有设备知道分配给它的令牌
    • 是的,这听起来很合理。我还建议您再次阅读 OAuth2 和 OAuth2.1 文档,如果您有一段时间没有阅读的话。
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2017-03-01
    • 2022-10-31
    • 1970-01-01
    • 2020-03-23
    • 2019-09-29
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多