1

我有一个与刷新令牌有关的问题。我在 Identity Server 中配置了我的 Angular 客户端,如下所示:

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

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

如果 Angular 客户端启动,20 秒后“静默更新”启动并请求新的访问令牌,这是有道理的,因为这大约是 30 秒访问令牌生命周期的 75%)。它获得了一个新的访问令牌,并且一切都在继续工作。

在给定的时刻,我停止了无声的更新。这意味着它不再刷新访问令牌,实际上,一段时间后我对 Web api 的调用失败,因为访问令牌已过期。

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

奇怪的是它成功获得了一个新的访问令牌,但我的理解是这应该不再起作用,因为刷新令牌应该在 60 秒后过期?

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

4

1 回答 1

1

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

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

它还使用 OIDC 会话管理,使用 Iframe 来跟踪会话到期。您可以在浏览器中看到该 cookie。

于 2019-12-23T21:24:33.290 回答