0

我开始使用 jose4j 针对它发布的 OpenedId Connect jwks 验证 Azure AD 发起的 jwt 令牌。一切都在一个宁静的环境中,这意味着没有状态。

为了避免每次收到请求时都从头开始重新创建所有对象,从而避免 jose4j 一次又一次地检索 jwks,我想使用缓存。

我的困境是要缓存什么:

  1. 序列化的 json jwks 字符串并调用带外验证,当它失败时获取一个新的 jwks。
  2. HttpsJwks
  3. HttpsJwksVerificationKeyResolver
  4. JwtConsumer

我在想 JwtConsumer 是最好的。如果这是一个不错的选择,有什么想法吗?

由于缓存在所有以多线程方式处理的 restfull 请求上共享(在 Karaf 中使用 cxf 蓝图),因此 JwtConsumer 应该是线程安全的。有谁知道是不是。

我正在考虑使用 ehcache 或使用 tid 作为键的 ConcurrentHashmap 进行缓存。

4

1 回答 1

1

JwtConsumer是线程安全的(只要使用的任何自定义验证器或定制器也是线程安全的)。但是,缓存和重用HttpsJwks对象是您将获得最大好处的地方,因为它在内部缓存了从 jwks 端点检索到的键。坚持HttpsJwks将阻止 jose4j 一次又一次地检索 jwks 端点的内容。

于 2017-06-18T12:49:12.900 回答