Как кэшировать набор ключей josks Jose4j в спокойной обстановке

Я начал использовать jose4j для проверки исходных токенов jwt Azure AD по отношению к jwks OpenedId Connect, которые он публикует. Все в спокойной обстановке, что означает отсутствие государства.

Чтобы не создавать заново все объекты с нуля каждый раз, когда приходит запрос, и, следовательно, jose4j снова и снова извлекает jwks, я хочу использовать кэширование.

Дилемма, которую я имею в том, что кешировать:

  1. Сериализованная строка json jwks и так называемая внешняя проверка, а в случае неудачи - получение нового jwks.
  2. HttpsJwks
  3. HttpsJwksVerificationKeyResolver
  4. JwtConsumer

Я думал, JwtConsumer является лучшим. Есть идеи на этот счет, если это хороший выбор?

Поскольку кеш распределяется между всеми повторными запросами, которые обрабатываются многопоточно (с использованием схемы cxf в Karaf), JwtConsumer должен быть поточно-ориентированным. Кто-нибудь знает, так ли это.

Я думал кешировать, используя ehcache или ConcurrentHashmap, используя tid в качестве ключа.

1 ответ

Решение

JwtConsumer является поточно-ориентированным (при условии, что любые пользовательские валидаторы или настройщики также являются поточно-ориентированными). Тем не менее, кэширование и повторное использование объекта (-ов) HttpsJwks - это то место, где вы получите большую часть преимуществ, поскольку оно внутренне кэширует ключи, полученные из конечной точки jwks. Держась HttpsJwks это то, что не позволит jose4j снова и снова получать содержимое конечной точки jwks.

Другие вопросы по тегам