如果刷新令牌已过期,为什么仍然可以请求访问令牌?

时间:2019-12-23 10:03:40

标签: angular asp.net-core asp.net-web-api identityserver4 angular-auth-oidc-client

我有一个有关刷新令牌的问题。我已经在Identity Server中配置了Angular Client,如下所示:

RefreshTokenUsage = TokenUsage.OneTimeOnly,
AccessTokenLifetime = 30,
AbsoluteRefreshTokenLifetime = 3600,
RefreshTokenExpiration = TokenExpiration.Sliding,
SlidingRefreshTokenLifetime = 60,

此外,我的Angular客户端使用“静音更新”机制(使用angular-auth-oidc-client)。

如果启动了Angular客户端,则20秒钟后将启动“静默更新”并要求提供新的访问令牌,这很有意义,因为这大约是30秒钟访问令牌生存期的75%。它获得一个新的访问令牌,并且一切正常。

在给定的时间,我停止无声更新。这意味着它不再刷新访问令牌,并且确实,过一会儿我对Web api的调用失败,因为访问令牌已过期。

现在,几分钟后,我重新启动了“静默更新”。

奇怪的是,它成功获取了一个新的访问令牌,但是据我了解,由于刷新令牌应该在60秒后过期,因此它不再起作用了吗?

我可能误解了这种滑动刷新令牌机制的工作原理。.有人可以解释为什么我仍然可以使用过期的刷新令牌来请求新的访问令牌吗?

1 个答案:

答案 0 :(得分:1)

我们最近已使用来自Angular SPA的oidc库实现了静默更新。

我的理解是,客户端库静默更新机制不使用刷新令牌策略,而是在每次要求静默更新并获取新的ID令牌和访问令牌时,都使用提示= none调用Authorize请求。

并且它还使用Oframe会话管理(使用Iframe)来跟踪会话到期时间。您可以在浏览器中看到该Cookie。