Résoudre des problèmes de validation de jetons JWT

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. Vous trouverez sur cette page des informations de dépannage utiles en cas d'échec de la validation du jeton JWT quand ESP affiche une erreur dans la réponse au client. Pour en savoir plus sur les jetons JWT, consultez la norme RFC7519.

Erreur : 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 soit "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 du jeton 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"
    }
    
Erreur : 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".
Erreur : 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.

Erreur : KEY_RETRIEVAL_ERROR

  • Vérifiez que l'URI de clé publique spécifié dans le champ jwks_uri de la section authentication: providers de votre fichier de configuration gRPC .yaml est correct et valide.

Erreur : Issuer not allowed

  • Vérifiez que la déclaration "iss" (émetteur) de votre jeton JWT correspond au champ issuer de la section authentication: providers de votre fichier de configuration gRPC .yaml.

Erreur : Audience not allowed

Si la déclaration "aud" (audience) dans un jeton JWT correspond au nom du service Endpoints, l'ESP valide l'audience et ignore les valeurs audiences de votre fichier de configuration gRPC .yaml. Par exemple, si le nom de votre service est "myservice.endpoints.example-project-12345.cloud.goog", un jeton JWT ayant "aud" défini sur "myservice.endpoints.example-project-12345.cloud.goog" ou "https://myservice.endpoints.example-project-12345.cloud.goog" représente une audience valide.

Si la déclaration "aud" n'est pas identique au nom du service Endpoints :

  • Vérifiez que la déclaration "aud" du jeton JWT correspond à l'une des valeurs audiences spécifiées dans la section authentication: providers de votre fichier de configuration gRPC .yaml.