Lorsqu'une application cliente inclut un jeton Web JSON (JWT) dans une requête adressée à une API, le proxy Extensible Service Proxy (ESP) valide le jeton avant d'envoyer la requête au backend de l'API. Cette page fournit des informations de dépannage en cas d'échec de validation JWT et si ESP affiche une erreur dans la réponse au client. Pour en savoir plus sur les jetons JWT, consultez la norme RFC 7519.
Erreur :401: Jwt issuer is not configured
Cela peut se produire lors du déploiement d'ESPv2 dans Cloud Run. L'option --allow-unauthenticated
n'est pas utilisée dans la commande gcloud run deploy
.
Si l'option n'est pas utilisée, le jeton JWT est intercepté et vérifié par le serveur IAM de contrôle des accès Cloud Run <a=" docs="" managing-access"="" run="" securing="">et non par ESPv2. IAM peut utiliser un émetteur différent de ESPv2.
</a=">
BAD_FORMAT
Vérifiez les éléments suivants :
- Assurez-vous que le jeton JWT contient un JSON valide.
- Vérifiez que le champ
"alg"
est présent dans l'en-tête du jeton JWT et que sa valeur est"RS256"
,"HS256"
,"RS384"
,"HS384"
,"RS512"
ou"HS512"
. - Vérifiez le type de données des champs suivants, s'ils sont présents, dans la charge utile JWT :
- Les déclarations
"iat"
(date/heure d'émission),"exp"
(date/heure d'expiration) et"nbf"
(pas avant le) sont des nombres supérieurs à 0 et non des chaînes. - Les champs
"sub"
(objet),"iss"
(émetteur) et"jti"
(ID JWT) sont des chaînes. - La déclaration
"aud"
(audience) est une chaîne ou un tableau de chaînes. - Assurez-vous que les déclarations suivantes sont présentes dans la charge utile du jeton JWT :
"sub"
(objet),"iss"
(émetteur) et"aud"
(audience).
Voici un exemple de jeton JWT décodé valide :
{ "alg": "RS256", "typ": "JWT", "kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a" } Payload: { "iss": "myservice@myproject.iam.gserviceaccount.com", "iat": 1493833746, "aud": "myservice.appspot.com", "exp": 1493837346, "sub": "myservice@myproject.iam.gserviceaccount.com" }
TIME_CONSTRAINT_FAILURE
Utilisez jwt.io pour décoder le jeton JWT et assurez-vous que :
- la déclaration
"exp"
(date/heure d'expiration) est présente ; - la valeur de la déclaration
"exp"
(date/heure d'expiration) correspond à une date et une heure dans le futur ; la date et l'heure actuelles doivent être antérieures à la date et heure d'expiration indiquées dans la déclaration"exp"
; - la déclaration
"nbf"
(pas avant), si elle est présente, correspond à une date et une heure dans le passé . La date et l'heure actuelles doivent être postérieures ou identiques à la date et heure indiquées dans la déclaration"nbf"
.
UNKNOWN
Utilisez jwt.io pour décoder le jeton JWT et vérifiez ce qui suit :
- Si la déclaration
"iss"
(émetteur) est une adresse e-mail, les déclarations"sub"
(objet) et"iss"
doivent être identiques. Cela permet de garantir que le jeton JWT est auto-émis pour les émetteurs via e-mail.
Error: KEY_RETRIEVAL_ERROR
- Vérifiez que l'URI de clé publique spécifié dans le
x-google-jwks_uri
de votre document OpenAPI est correct et valide.
Error: Issuer not allowed
Vérifiez que la revendication
"iss"
(émetteur) de votre jeton JWT correspond au champx-google-issuer
dans la sectionsecurityDefinitions
de l'objet de sécurité de votre document OpenAPI.Dans le document OpenAPI, vérifiez que l'objet "security" est activé pour la méthode d'API appelée.
Consultez le
exemple de openapi.yaml
pour obtenir un exemple de description de la sécurité au niveau de la méthode en utilisant
Objets securityDefinition
et security
.
Error: Audience not allowed
Comparez la revendication "aud"
(audience) dans un jeton JWT pour vérifier si elle correspond au nom du service Endpoints, qui correspond au champ host
du document OpenAPI.
Si la revendication "aud"
et le nom du service Endpoints sont différents :
vérifiez que la revendication
"aud"
du jeton JWT correspond à l'une des valeursx-google-audiences
spécifiées dans votre document OpenAPI ;assurez-vous que
x-google-audiences
etx-google-issuer
se trouvent dans le même objetsecurityDefinitions
de votre document OpenAPI.
Si la revendication "aud"
et le nom du service Endpoints sont identiques,
le processus de vente aux entreprises
valide l'audience
ignore les
x-google-audiences
dans le document OpenAPI. Par exemple, si votre nom de service est "myservice.endpoints.example-project-12345.cloud.goog"
, un jeton JWT avec "aud"
défini sur "myservice.endpoints.example-project-12345.cloud.goog"
ou "https://myservice.endpoints.example-project-12345.cloud.goog"
est une audience valide.