如何在 restful 环境中缓存 Jose4j jwks 键集

How to cache Jose4j jwks key set in a restful environment

我开始使用 jose4j 根据它发布的 OpenedId Connect jwks 验证 Azure AD 原始 jwt 令牌。全部在 restful 环境中,这意味着没有状态。

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

我的困境是要缓存什么:

  1. 序列化 json jwks 字符串并执行此操作称为带外验证,当它失败时获取新的 jwks。
  2. HttpsJwks
  3. HttpsJwksVerificationKeyResolver
  4. Jwt消费者

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

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

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

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