Passer au contenu

Comment puis-je résoudre l'erreur d'appel d'API AWS STS AssumeRoleWithWebIdentity « InvalidIdentityToken » ?

Lecture de 5 minute(s)
0

L'appel d'API AWS Security Token Service (AWS STS) AssumeRoleWithWebIdentity échoue avec l'erreur « InvalidIdentityToken ». Je souhaite résoudre cette erreur.

Résolution

Lorsque votre appel d'API AssumeRoleWithWebIdentity échoue, vous pouvez recevoir une erreur similaire au message suivant :

« An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation. Couldn't retrieve verification key from your identity provider. » (Une erreur s’est produite (InvalidIdentityToken) lors de l'appel de l'opération AssumeRoleWithWebIdentity. Impossible de récupérer la clé de vérification auprès de votre fournisseur d'identité.)

Remarque : L'historique des événements AWS CloudTrail ne journalise pas cette erreur car ce problème échoue côté client.

Vérifier l'accès public pour .well-known and jwks_uri

Si vous ne parvenez pas à accéder à l'URL .well-known et jwks_uri du fournisseur d'identité (IdP), un message d'erreur peut s’afficher. Vérifiez que vous pouvez accéder publiquement à l’URL .well-known et jwks_uri de l'IdP.

Pour vérifier l'accessibilité, cliquez sur les liens suivants dans votre navigateur :

  • https://BASE_SERVER_URL/.well-known/openid-configuration
  • https://BASE_SERVER_URL/.well-known/jwks.json

-ou-

Pour vérifier l'accessibilité, exécutez l'une des commandes suivantes.

Pour Windows :

wget https://BASE_SERVER_URL/.well-known/openid-configurationwget https://BASE_SERVER_URL/.well-known/jwks.json

Pour Linux :

curl https://BASE_SERVER_URL/.well-known/openid-configurationcurl https://BASE_SERVER_URL/.well-known/jwks.json

Remarque : Remplacez BASE_SERVER_URL par l'URL de base de votre IdP.

Pour vérifier si vous pouvez accéder aux liens, recherchez le code d'état 200 HTTP dans la réponse à la requête.

Vérifier les paramètres du pare-feu

Si vous ne parvenez pas à accéder à l’URL .well-known et jwks_uri de l'IdP, vérifiez les paramètres du pare-feu. Assurez-vous que les domaines ne figurent pas sur une liste de refus. Selon la configuration actuelle du pare-feu, il peut être nécessaire d'ajouter les domaines à une liste d'autorisation.

Si un pare-feu personnalisé bloque les requêtes, un message d'erreur peut s’afficher.

Si vous ne parvenez pas à accéder aux paramètres du pare-feu, utilisez le navigateur avec un appareil appartenant à un autre réseau, tel qu'un téléphone.

Accédez aux liens suivants dans votre navigateur :

  • https://BASE_SERVER_URL/.well-known/openid-configuration
  • https://BASE_SERVER_URL/.well-known/jwks.json

Remarque : Remplacez BASE_SERVER_URL par l'URL de base de votre IdP.

Si le serveur qui effectue l'appel d'API AssumeRoleWithWebIdentity est une instance Amazon Elastic Compute Cloud (Amazon EC2), vérifiez les paramètres de configuration. Pour de plus amples informations, consultez la section Pourquoi ne puis-je pas me connecter à un site Web hébergé sur mon instance EC2 ?

Vérifier la latence de fonctionnement

Lorsque le temps de latence entre les requêtes d'API de l'IdP et le point de terminaison AWS STS est supérieur à 5 secondes, un message d'erreur peut s’afficher.

Vérifiez la latence pour l'ensemble du fonctionnement. Cela inclut le temps de requête et de réponse de STS et le temps de requête et de réponse des attributs IdP.

Réduire la latence STS

Utilisez les points de terminaison régionaux AWS plutôt que les points de terminaison globaux pour le service STS. Cela permet de vérifier que les requêtes sont acheminées vers le serveur le plus proche géographiquement afin de minimiser la latence. Pour plus d'informations, consultez la section Écrire du code pour utiliser les régions AWS STS.

Remarque : Pour les kits SDK AWS, le paramètre Region achemine le point de terminaison de destination de la requête vers l'endroit où l'appel est effectué dans la configuration sts_regional_endpoint.

Évaluez la latence de l'IdP

L'IdP envoie des requêtes au point de terminaison STS. Pour vérifier si la requête envoyée au point de terminaison STS prend trop de temps, examinez les paquets sortants de l'IdP dans les journaux de l'IdP.

Remarque : La requête peut expirer et échouer si elle met plus de 5 secondes à être transmise de l'IdP au point de terminaison STS. Vous pouvez contacter votre fournisseur d'identité pour demander une augmentation de la disponibilité géographique afin de réduire la latence de cet appel d'API.

(Facultatif) Utiliser le backoff exponentiel et augmenter le nombre de nouvelles tentatives

L'IdP soutient AssumeRoleWithWebIdentity en fournissant des informations. La plupart des IdP comportent des limites d'API pour éviter les erreurs de limitation, et l'IdP peut ne pas renvoyer les clés requises à partir des appels d'API. Si l'API rencontre des problèmes intermittents pour atteindre votre IdP, utilisez les options de dépannage suivantes :

Réduire les requêtes STS à .well_known et jwks_uri

Si votre JSON Web Key Set (JWKS) définit les en-têtes de réponse Pragma : no-cache ou Cache-Control : no-cache, STS ne met pas en cache votre JWKS. STS effectue un rappel pour les clés référencées dans un ID_TOKEN mais pas dans le cache. Dans ce cas, STS peut envoyer un trop grand nombre de requêtes à votre URL .well-known et jwks_uri.

Pour réduire les rappels provenant de STS, vérifiez que votre JWKS ne définit aucun de ces en-têtes de réponse. Cela permet à STS de mettre en cache votre JWKS.

Réduire le nombre de clés dans votre JWKS

STS ne prend en charge que 100 clés dans un JWKS. Si votre JWKS possède plus de 100 clés, STS ne peut pas vérifier les jetons signés avec vos clés. L'erreur « InvalidIdentityToken » peut s'afficher lorsque vous appelez AssumeRoleWithWebIdentity et que votre JWKS contient plus de 100 clés.

Pour résoudre l'erreur, supprimez de votre JWKS les clés qui sont nécessaires plus longtemps. Vous pouvez également réduire le nombre de clés présentes dans votre JWKS.

Informations connexes

Bienvenue sur la page de référence de l'API AWS Security Token Service

Comment résoudre les erreurs de limitation des API ou de « dépassement du taux » pour IAM et AWS STS ?

AWS OFFICIELA mis à jour il y a 7 mois