Как кэшировать набор ключей josks Jose4j в спокойной обстановке
Я начал использовать jose4j для проверки исходных токенов jwt Azure AD по отношению к jwks OpenedId Connect, которые он публикует. Все в спокойной обстановке, что означает отсутствие государства.
Чтобы не создавать заново все объекты с нуля каждый раз, когда приходит запрос, и, следовательно, jose4j снова и снова извлекает jwks, я хочу использовать кэширование.
Дилемма, которую я имею в том, что кешировать:
- Сериализованная строка json jwks и так называемая внешняя проверка, а в случае неудачи - получение нового jwks.
- HttpsJwks
- HttpsJwksVerificationKeyResolver
- JwtConsumer
Я думал, JwtConsumer является лучшим. Есть идеи на этот счет, если это хороший выбор?
Поскольку кеш распределяется между всеми повторными запросами, которые обрабатываются многопоточно (с использованием схемы cxf в Karaf), JwtConsumer должен быть поточно-ориентированным. Кто-нибудь знает, так ли это.
Я думал кешировать, используя ehcache или ConcurrentHashmap, используя tid в качестве ключа.
1 ответ
JwtConsumer
является поточно-ориентированным (при условии, что любые пользовательские валидаторы или настройщики также являются поточно-ориентированными). Тем не менее, кэширование и повторное использование объекта (-ов) HttpsJwks - это то место, где вы получите большую часть преимуществ, поскольку оно внутренне кэширует ключи, полученные из конечной точки jwks. Держась HttpsJwks
это то, что не позволит jose4j снова и снова получать содержимое конечной точки jwks.