Utiliser des jetons d'ID Google pour authentifier les utilisateurs

Cette page explique comment permettre l'authentification des utilisateurs dans API Gateway.

Pour authentifier un utilisateur, une application cliente doit envoyer un jeton Web JSON (JWT) dans l'en-tête d'autorisation de la requête HTTP envoyée à votre API backend. API Gateway valide le jeton pour le compte de votre API. Vous n'avez donc pas besoin d'ajouter de code pour traiter l'authentification. Cependant, vous devez configurer la configuration de l'API pour que votre passerelle soit compatible avec les méthodes d'authentification que vous avez choisies.

API Gateway valide un jeton JWT de manière optimale à l'aide du jeu de clés Web JSON (JWKS) de l'émetteur de jetons JWT. L'emplacement du JWKS est spécifié dans la configuration de l'API de la passerelle. API Gateway met en cache le JWKS pendant cinq minutes et l'actualise toutes les cinq minutes.

Avant de commencer

  • Lorsqu'une application cliente envoie une requête HTTP, l'en-tête d'autorisation de la requête doit contenir les revendications suivantes :
    • iss (émetteur)
    • sub (objet)
    • aud (cible)
    • iat (date/heure d'émission)
    • exp (date/heure d'expiration)

Configurer API Gateway pour l'authentification client

Vous devez disposer d'une section de sécurité dans la configuration de votre API pour qu'API Gateway valide les revendications dans le jeton JWT signé. Le schéma utilisé pour définir les méthodes de sécurité dépend de la version de la spécification OpenAPI que vous utilisez.

Pour l'authentification à l'aide d'un jeton d'ID Google :

OpenAPI 2.0

  1. Ajoutez les éléments suivants à votre configuration d'API :
    securityDefinitions:
      google_id_token:
        authorizationUrl: ""
        flow: "implicit"
        type: "oauth2"
        x-google-issuer: "https://accounts.google.com"
        x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs"
        # Optional. Replace CLIENT_ID with your client ID
        x-google-audiences: "CLIENT_ID"
  2. Ajoutez une section de sécurité au niveau de l'API pour une application à l'ensemble de l'API, ou au niveau de la méthode pour une application à une méthode spécifique.
    security:
       -   google_id_token: []

OpenAPI 3.x

  1. Ajoutez les éléments suivants à votre configuration d'API :
    components:
      securitySchemes:
        google_id_token:
          type: oauth2
          flows:
           implicit:
             authorizationUrl: ""
             scopes: {}
          x-google-auth:
            issuer: https://accounts.google.com
            jwksUri: https://www.googleapis.com/oauth2/v3/certs
            # Optional. Replace CLIENT_ID with your client ID(s) as a list of strings.
            audiences:
              - CLIENT_ID
  2. Ajoutez une section de sécurité au niveau de l'API pour une application à l'ensemble de l'API, ou au niveau de la méthode pour une application à une méthode spécifique.
    security:
      - google_id_token: []

Vous pouvez établir plusieurs définitions de sécurité dans la configuration d'API, mais l'émetteur doit être différent pour chaque définition. Notez que, si vous utilisez des sections de sécurité au niveau de l'API et au niveau de la méthode, les paramètres au niveau de l'API seront ignorés.

Les champs x-google-audiences (OpenAPI 2.0) ou audiences (OpenAPI 3.x) ne sont pas obligatoires. API Gateway accepte tous les jetons JWT avec le nom du service de backend sous la forme https://SERVICE_NAME dans la revendication aud.

Pour autoriser des ID clients supplémentaires à accéder au service de backend, vous pouvez spécifier les ID clients autorisés dans le champ audiences applicable. Plusieurs audiences sont spécifiées sous forme de valeurs séparées par une virgule dans OpenAPI 2.0 et sous forme de liste dans OpenAPI 3.x. API Gateway accepte ensuite les jetons JWT comportant dans la revendication aud les ID clients spécifiés.

Effectuer un appel authentifié à une API API Gateway

Lorsque vous envoyez une requête à l'aide d'un jeton d'authentification, nous vous recommandons de placer ce jeton dans l'en-tête Authorization:Bearer. Exemple :

curl -H "Authorization: