在 nimbus-jose-jwt 中,lifetime 和 refreshTime 有什么区别?

In nimbus-jose-jwt, what is difference between lifespan and refreshTime?

nimbus-jose-jwt的classDefaultJWKSetCache有两个字段lifetime和refreshTime
来自 Java 文档 -

lifespan - The lifespan of the cached JWK set before it expires, negative means no expiration.
refreshTime - The time after which the cached JWK set is marked for refresh, negative if not specified. Should be shorter or equal to the lifespan.

这两个有什么区别。 是不是意味着,
lifespan expiry 之后,缓存的 JWK 集将被逐出并从 jwks remote url 再次加载(说 remote url 因为我正在使用 RemoteJWKSet) .
刷新到期 之后,现有的 JWK 集将使用从远程 url.

检索到的密钥进行更新

但我不明白两者之间的实际区别。两者似乎都在做同样的事情。有人可以更详细地解释细节和任何例子吗?

编辑 - 如果我没有给出 lifetime 的有效期,并且 refreshTime 的有效期为 1 小时,我是否保证我的密钥将每隔一小时更新一次。

lifespanDefaultJWKSetCache 将驱逐缓存 JWKSet 的时间。即,自填充缓存以来 lifespan 时间单位 过去后,对 JWKSetCache.get() 的调用将始终 return null 直到新的 JWKSet存储到缓存中。

refreshTime 是影响值 returned by JWKSetCache.requiresRefresh() 方法的时间。自填充缓存以来 refreshTime 时间单位 过去后,此方法将 return true,否则,它将 return false。此设置不会以任何方式影响缓存行为。

RemoteJWKSet 使用由 JWKSetCache.requiresRefresh() 编辑的值 return 在缓存实际过期之前从远程 URL 重新下载 JWKSet。这就是为什么文档建议将 refreshTime 设置为小于 lifespan.

的值

目前,当 lifespanrefreshTime 已过时,RemoteJWKSet 触发远程 JWKSet 下载(参见this line.) 因此,到今天为止,设置其中任何一个都没有太大区别。我想可以通过将这两个值分开来实现一些更复杂的逻辑。