Utiliser Firebase pour authentifier les utilisateurs

Cette page explique comment prendre en charge 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 au nom de votre API. Vous n'avez donc pas besoin d'ajouter de code dans votre API pour traiter l'authentification. Toutefois, vous devez configurer la configuration de l'API pour que votre passerelle soit compatible avec les méthodes d'authentification choisies.

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

Avant de commencer

  • Ajoutez un code d'authentification à votre application cliente, en suivant les instructions de la documentation sur l'authentification Firebase. Firebase assure la compatibilité de l'authentification en utilisant des mots de passe, des numéros de téléphone et des fournisseurs d'identité fédérés populaires tels que Google, Facebook et Twitter.
    • Lorsque votre application cliente envoie une requête HTTP, l'en-tête d'autorisation de la requête doit contenir les revendications JWT suivantes :
      • iss (émetteur)
      • sub (objet)
      • aud (cible)
      • iat (date/heure d'émission)
      • exp (date/heure d'expiration)

Configurer API Gateway pour l'authentification du client

Vous devez disposer d'un objet d'exigences de sécurité et d'un objet de définitions de sécurité dans votre configuration d'API pour que API Gateway valide les revendications dans le jeton JWT signé.

Pour l'authentification Firebase :

  1. Ajoutez les éléments suivants à la définition de sécurité dans la configuration de l'API, en suivant le schéma de sécurité OpenAPI 2.0:

     securityDefinitions:
        firebase:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-PROJECT-ID with your project ID
          x-google-issuer: "https://securetoken.google.com/YOUR-PROJECT-ID"
          x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
          x-google-audiences: "YOUR-PROJECT-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:
        - firebase: []
    

Vous pouvez définir plusieurs définitions de sécurité dans la configuration de l'API, mais chaque définition doit avoir un émetteur différent. 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.

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 --request POST \
  --header "Authorization: Bearer ${TOKEN}" \
  "${GATEWAY_URL}/echo"

Ici, GATEWAY_URL et TOKEN sont des variables d'environnement contenant respectivement l'URL de la passerelle déployée et le jeton d'authentification. Consultez la section Envoyer une requête authentifiée à une API API Gateway pour obtenir un exemple de code qui envoie une requête à l'aide de l'en-tête Authorization:Bearer.

Si vous ne pouvez pas utiliser l'en-tête lors de l'envoi de la requête, vous pouvez placer le jeton d'authentification dans un paramètre de requête appelé access_token. Exemple :

curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"

Recevoir les résultats authentifiés dans votre API

API Gateway transfère généralement tous les en-têtes reçus. Toutefois, il remplace l'en-tête Authorization d'origine lorsque l'adresse du backend est spécifiée par x-google-backend dans la configuration de l'API.

API Gateway enverra le résultat de l'authentification dans X-Apigateway-Api-Userinfo à l'API backend. Il est recommandé d'utiliser cet en-tête à la place de l'en-tête Authorization d'origine. Cet en-tête est encodé au format base64url et contient la charge utile JWT.

Étapes suivantes