如何在 restful 环境中缓存 Jose4j jwks 键集
How to cache Jose4j jwks key set in a restful environment
我开始使用 jose4j 根据它发布的 OpenedId Connect jwks 验证 Azure AD 原始 jwt 令牌。全部在 restful 环境中,这意味着没有状态。
为了避免每次收到请求时都从头开始重新创建所有对象,从而避免 jose4j 一次又一次地检索 jwks,我想使用缓存。
我的困境是要缓存什么:
- 序列化 json jwks 字符串并执行此操作称为带外验证,当它失败时获取新的 jwks。
- HttpsJwks
- HttpsJwksVerificationKeyResolver
- Jwt消费者
我认为 JwtConsumer 是最好的。如果这是一个不错的选择,对此有什么想法吗?
由于缓存在所有 restfull 请求上共享,这些请求以多线程方式处理(使用 Karaf 中的 cxf 蓝图),JwtConsumer 应该是线程安全的。有谁知道是不是。
我正在考虑使用 ehcache 或 ConcurrentHashmap 使用 tid 作为键进行缓存。
JwtConsumer
是线程安全的(只要使用的任何自定义验证器或定制器也是线程安全的)。但是,缓存和重用 HttpsJwks 对象是您将实现绝大多数好处的地方,因为它在内部缓存从 jwks 端点检索的密钥。坚持 HttpsJwks
将阻止 jose4j 一次又一次地检索 jwks 端点的内容。
我开始使用 jose4j 根据它发布的 OpenedId Connect jwks 验证 Azure AD 原始 jwt 令牌。全部在 restful 环境中,这意味着没有状态。
为了避免每次收到请求时都从头开始重新创建所有对象,从而避免 jose4j 一次又一次地检索 jwks,我想使用缓存。
我的困境是要缓存什么:
- 序列化 json jwks 字符串并执行此操作称为带外验证,当它失败时获取新的 jwks。
- HttpsJwks
- HttpsJwksVerificationKeyResolver
- Jwt消费者
我认为 JwtConsumer 是最好的。如果这是一个不错的选择,对此有什么想法吗?
由于缓存在所有 restfull 请求上共享,这些请求以多线程方式处理(使用 Karaf 中的 cxf 蓝图),JwtConsumer 应该是线程安全的。有谁知道是不是。
我正在考虑使用 ehcache 或 ConcurrentHashmap 使用 tid 作为键进行缓存。
JwtConsumer
是线程安全的(只要使用的任何自定义验证器或定制器也是线程安全的)。但是,缓存和重用 HttpsJwks 对象是您将实现绝大多数好处的地方,因为它在内部缓存从 jwks 端点检索的密钥。坚持 HttpsJwks
将阻止 jose4j 一次又一次地检索 jwks 端点的内容。