1

nimbus-jose-jwt 的DefaultJWKSetCache类有两个字段,lifespan 和 refreshTime。
来自 Java 文档 -

lifespan - 缓存的 JWK 设置在过期之前的生命周期,负数表示没有过期。
refreshTime - 缓存的 JWK 集标记为刷新的时间,如果未指定,则为负数。应该更短或等于寿命。

这两者有什么区别。这是否意味着,
在使用期限到期后,缓存的 JWK 集将被逐出并再次从 jwks 远程 url 加载(在我使用时说远程 url RemoteJWKSet)。
并且在刷新到期后,现有的 JWK 集将使用从远程 url 检索到的密钥进行更新。

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

编辑 - 如果我的寿命没有到期,而 refreshTime 的到期时间为 1 小时,我是否保证我的密钥将每隔一小时更新一次。

4

1 回答 1

2

生命周期DefaultJWKSetCache将驱逐 cached的时间JWKSet。即,在缓存填充后经过生命周期时间单位后,调用JWKSetCache.get()将始终返回null,直到新JWKSet的存储到缓存中。

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

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

目前,当生命周期刷新时间已过时RemoteJWKSet触发远程下载(请参阅此行。)因此,从今天开始,设置其中任何一个都没有太大区别。我猜想可以实现一些更复杂的逻辑,将这两个值分开。JWKSet

于 2021-11-21T04:21:30.253 回答