Проверка JWT: кэширование JWKS, полученного из кэшированного документа обнаружения с помощью Azure API Management - PullRequest
0 голосов
/ 28 февраля 2019

Я настраиваю кэширование для конечной точки обнаружения ниже, оборачивая его и кэшируя с помощью управления API Azure.

https://openid -connect-eu.onelogin.com / oidc / .well-known / openid-configuration

Таким образом, новая ссылка ниже выполняет кэширование:

https://my.azure -api.net / sso / .well-known / openid-configuration? subscription-key = mykey

Ниже приведена политика проверки токена:

 <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Error: expired token or invalid token" require-expiration-time="true" require-scheme="Bearer" require-signed-tokens="true">

        <openid-config url="https://my.azure-api.net/sso/.well-known/openid-configuration?subscription-key=mykey" />
        <audiences>
            <audience>id</audience>
        </audiences>
        <issuers>
            <issuer>https://openid-connect-eu.onelogin.com/oidc</issuer>
       </issuers>
    </validate-jwt>

Мой вопрос заключается в том, нужно ли мне кэшировать ссылку JWKS ниже, которая находится в документе об обнаружении выше и используетсядля проверки?Если да, то как я могу его кэшировать?

https://openid -connect-eu.onelogin.com / oidc / certs

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Я не знаю причину, по которой вы кэшируете этот документ, но обе конечные точки метаданных (https://openid -connect-eu.onelogin.com / oidc / .well-known / openid-configuration ) и конечная точка набора ключей (https://openid -connect-eu.onelogin.com / oidc / certs ) выбираются APIM из политики validate-jwt.

0 голосов
/ 24 мая 2019

URL-адрес в возвращенном теле html изменяется и заменяется новым URL-адресом, который кэшируется через APIM.

0 голосов
/ 28 февраля 2019

Вам нужно будет кэшировать содержимое конечной точки JWKS где-то в службе, которую вы пытаетесь проверить, запрашивающей JWT.Хороший способ кэширования этих ключей - использовать библиотеку кэширования, которая будет кэшировать ключи на уровне обслуживания в течение определенного периода времени.Библиотека, которую я использую в своих сервисах, называется Бен Мэймсом caffeine и может быть найдена здесь .Вот краткий пример того, как вы можете кэшировать JWK в течение 30 минут:

cache = Caffeine.newBuilder()
        .maximumSize(5)
        .expireAfterWrite(30, TimeUnit.MINUTES)
        .build(k -> jwksMap.get(k));

Ваша служба может затем каждые 30 минут обновлять ключи из конечной точки для обновления кэша.

...