Utiliser Firebase 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
- Ajoutez un code d'authentification à votre application cliente en suivant la documentation sur Firebase Authentication. 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.
-
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 Firebase :
OpenAPI 2.0
- Ajoutez les éléments suivants à votre configuration d'API :
securityDefinitions: firebase: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace PROJECT_ID with your project ID x-google-issuer: "https://securetoken.google.com/PROJECT_ID" x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com" x-google-audiences: "PROJECT_ID"
- 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: []
OpenAPI 3.x
- Ajoutez les éléments suivants à votre configuration d'API :
components: securitySchemes: firebase: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: # Replace PROJECT_ID with your project ID issuer: https://securetoken.google.com/PROJECT_ID jwksUri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com audiences: - PROJECT_ID
- 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 é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.
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: Bearer TOKEN" "GATEWAY_URL/hello"
Ici, GATEWAY_URL et TOKEN doivent être remplacés respectivement par l'URL de la passerelle déployée et le jeton d'authentification. Consultez la section Effectuer 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/hello?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. Cependant, il remplace l'en-tête Authorization d'origine lorsque l'adresse de backend est spécifiée par x-google-backend dans la configuration de l'API.
API Gateway envoie le résultat de l'authentification dans le champ 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é en base64url et contient la charge utile JWT.