【问题标题】:Refresh Token expires earler then should be OAuth 2.0刷新令牌提前过期,然后应该是 OAuth 2.0
【发布时间】:2018-09-09 00:38:32
【问题描述】:

我们在服务器端有 C# 和移动应用程序,在服务器端我们将刷新令牌过期时间设置为 30 天,

“AbsoluteRefreshTokenLifetime”:2592000

在移动端,每次打开应用时,因为我们只存储了刷新令牌,并且因为访问令牌为空,所以我们发送一个返回 401 的调用,然后我们刷新令牌并继续使用新令牌,并且在刷新令牌过期 30 天后,我们会显示会话已过期的对话框,并将用户发送到登录屏幕,以发出新的登录请求。 但是最近我们开始收到来自移动客户端的反馈,他们已经开始看到会话在 30 天之前过期,大约 13-14 天。 是否有可能因为我们每次打开应用程序时都请求新的刷新令牌,有一天,服务器会撤销所有拍摄,使它们无效? 这个问题还有什么原因?

【问题讨论】:

  • 您使用的身份提供者是什么?是否允许用户在您的应用程序之外更改密码?
  • 身份服务器 3,是的,但它不会撤销刷新令牌
  • 您确定这不是用户更改密码造成的吗?如果发生这种情况,通常身份提供者可以撤销已发行的令牌
  • 是的,我在网络上检查过,当我们在移动设备上更改时仍然使用该令牌
  • @KavinduDodanduwa,我们发现很少有错误消息的日志

标签: android ios oauth-2.0


【解决方案1】:

可能是刷新令牌使用设置,

RefreshTokenUsage 设置 - OneTime vs ReUse

根据身份server documentation,刷新令牌可以一次性使用或重复使用。

如果它是可重复使用的(ReUse),相同的刷新令牌将对令牌刷新有效(直到它过期)。

但如果它是一次性(OneTime)使用,则刷新令牌一经使用就会失效。

现在在后一种情况下,您的应用程序必须以线程安全的方式进行令牌刷新。不应该存在竞争条件,以便刷新调用将使用旧的/使用的刷新令牌。所以检查这个设置以及检查竞争条件

是否有任何工具可用于了解刷新令牌的到期时间并读取其他信息

身份提供商不允许这样做(至少我见过的那些)。刷新令牌设置由身份服务器配置控制。所以检查部署设置。例如,这可能是与documentation 中提到的AbsoluteRefreshTokenLifetimeSlidingRefreshTokenLifetime 相关的配置问题

【讨论】:

    猜你喜欢
    • 2015-11-04
    • 2014-07-09
    • 2015-07-08
    • 2015-02-28
    • 2014-01-01
    • 2014-09-22
    • 2015-05-17
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多