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?
3 Réponses :
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.
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.
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.
Je ne sais pas vraiment ce que vous essayez d'accomplir. Pourriez-vous expliquer votre problème et qu'essayez-vous de faire?
L'url du corps html renvoyé est modifiée et remplacée par une nouvelle URL qui est mise en cache via APIM.
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.