带有 SlidingRefreshTokenLifetime 的 IdentityServer 越来越多地增加令牌过期

IdentityServer with SlidingRefreshTokenLifetime increasingly adds to token expiration

我一直在微调我在 IdentityServer 中的客户端注册 4.x,但我遇到了一个我看不到解决方案的情况。

首先,我正在实施一种轮换刷新令牌的策略,因此我将它们设置为 OneTime 用法。此外,我将 AbsoluteRefreshTokenLifetime 设置为零 (0),将 RefreshTokenExpiration 设置为 Sliding,例如 SlidingRefreshTokenLifetime 24 小时。

根据文档,这导致配置中刷新令牌只能使用一次,并且在使用时会获得新的到期时间。

when refreshing the token, the lifetime of the refresh token will be renewed (by the amount specified in SlidingRefreshTokenLifetime). The lifetime will not exceed AbsoluteRefreshTokenLifetime.

此外,mderriey 在这里有一个很好的解释,它使用了时间变量:https://github.com/IdentityServer/IdentityServer3/issues/2411#issuecomment-171483658

但是,有一个说法与我这边发生的事情不符,那就是关于刷新令牌的新到期:

You use it at time T8 to get a new access token. Its new expiration time is T18

在我的例子中,新的到期时间是 T22SlidingRefreshTokenLifetime 附加到 剩余时间 在使用的​​刷新令牌上。

所以,我处于配置客户端的情况,每次使用刷新令牌时,新创建的刷新令牌的到期时间越来越长。

来自日志:

// This is where the token is first created
2022-03-08 15:59:23.783 +00:00 [DBG] Creating refresh token
2022-03-08 15:59:23.784 +00:00 [DBG] Setting a sliding lifetime: 86400
// First time the refresh token is used
2022-03-08 16:51:07.573 +00:00 [DBG] Updating refresh token
2022-03-08 16:51:07.574 +00:00 [DBG] Token usage is one-time only. Setting current handle as consumed, and generating new handle
2022-03-08 16:51:07.579 +00:00 [DBG] ubeVQ9IFAHEFfNRXHcCj22q3TpYCn4il2IAV7E1FbBQ= found in database
2022-03-08 16:51:07.605 +00:00 [DBG] Refresh token expiration is sliding - extending lifetime
2022-03-08 16:51:07.606 +00:00 [DBG] Current lifetime: 3104
2022-03-08 16:51:07.607 +00:00 [DBG] New lifetime: 89504
// 2nd time the refresh token is used
2022-03-08 17:42:08.671 +00:00 [DBG] Updating refresh token
2022-03-08 17:42:08.672 +00:00 [DBG] Token usage is one-time only. Setting current handle as consumed, and generating new handle
2022-03-08 17:42:08.678 +00:00 [DBG] jU3/t8Y0yolEA7viiPcAj5v0wVQWoviNjjfLS3atfhA= found in database
2022-03-08 17:42:08.701 +00:00 [DBG] Refresh token expiration is sliding - extending lifetime
2022-03-08 17:42:08.702 +00:00 [DBG] Current lifetime: 6165
2022-03-08 17:42:08.702 +00:00 [DBG] New lifetime: 92565

如您所见,刷新令牌的有效期越来越长。

是否有一些 class 或接口可以实现,我可以在哪里处理这个问题和 cap 新的到期时间?

原来的refresh token的大部分属性好像都是re-used在创建新的refresh token时设置为OneTime的用法。 包括 CreationTime,这是计算生命周期时使用的时间戳。

细心的人可能会注意到日志中提到的新生命周期等于 Current lifetime + 86400。

由于 CreationTime 没有改变,生命周期的值会随着时间的推移而增长,因为它是自该特定时间以来的秒数。

我误以为CreationTime反映了PersistedGrants中新建记录的时间戳。