1
votes

Validation JWT: Caching JWKS dérivé d'un document de découverte mis en cache via Azure API Management

J'ai configuré la mise en cache pour le point de terminaison de découverte ci-dessous en l'enveloppant et en le mettant en cache via Azure API Management.

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

Donc le nouveau lien ci-dessous fait la mise en cache:

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

Voici la politique de validation des jetons:

 <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>

Ma question est la suivante: dois-je mettre en cache le lien JWKS ci-dessous qui se trouve sur le document de découverte ci-dessus et utilisé pour la validation? Si tel est le cas, comment puis-je le mettre en cache?

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


1 commentaires

D'après mon expérience, je crois qu'Azure APIM met en cache la configuration OpenID, elle n'est donc pas récupérée à chaque demande, mais je ne trouve aucune information à ce sujet, comme la durée de sa mise en cache. Comme d'habitude, la documentation est horrible.


3 Réponses :


0
votes

Vous devrez mettre en cache le contenu du point de terminaison JWKS quelque part dans le service que vous essayez de valider le JWT demandeur. Un bon moyen de mettre en cache ces clés consiste à utiliser une bibliothèque de mise en cache qui mettra en cache les clés au niveau du service pendant une durée spécifiée. La bibliothèque que j'utilise dans mes services s'appelle caféine par Ben Mames et peut être trouvée ici . Voici un exemple rapide de la façon dont vous pouvez mettre en cache un JWK pendant 30 minutes:

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

Votre service pourrait ensuite récupérer les clés du point de terminaison toutes les 30 minutes pour actualiser le cache.


1 commentaires

Peut-il être utilisé avec validate-jwt dans APIM? Je ne peux pas voir l'exemple de son utilisation avec validate-jwt dans APIM comme indiqué dans OP.



0
votes

Je ne connais pas la raison pour laquelle vous mettez ce document en cache, mais les deux points de terminaison des métadonnées ( https://openid-connect-eu.onelogin.com/oidc/.well-known/openid-configuration ) et point de terminaison de l'ensemble de clés ( https://openid-connect-eu.onelogin.com/oidc/ certificats ) sont récupérés par APIM à partir de la politique validate-jwt.


1 commentaires

Je ne sais pas vraiment ce que vous essayez d'accomplir. Pourriez-vous expliquer votre problème et qu'essayez-vous de faire?



0
votes

L'url du corps html renvoyé est modifiée et remplacée par une nouvelle URL qui est mise en cache via APIM.


0 commentaires