Authentifier les utilisateurs finaux

Si votre application traite les requêtes provenant d'utilisateurs finaux, il est recommandé de limiter l'accès uniquement aux utilisateurs finaux autorisés. À cet effet, vous pouvez choisir l'une des options suivantes :

Pour chacune des options proposées ci-dessus, vous avez besoin d'une application Web ou mobile publique qui gère le flux de connexion, puis effectue des appels d'API authentifiés auprès d'un service Cloud Run. Cette application Web publique peut elle-même être hébergée sur un service Cloud Run public. Si vous utilisez Google Sign-In, cette application Web publique doit appartenir au même domaine que le service Cloud Run nécessitant une authentification.

Utiliser Identity Platform ou Firebase Authentication

Si vous souhaitez authentifier les utilisateurs à l'aide d'une combinaison adresse e-mail/mot de passe, d'un numéro de téléphone, d'un compte de réseau social tel que Facebook ou GitHub, ou d'un mécanisme d'authentification personnalisé, vous pouvez utiliser Firebase Authentication ou Identity Platform. Pour un tutoriel complet sur l'utilisation d'Identity Platform pour l'authentification des utilisateurs finaux, consultez le tutoriel Authentification des utilisateurs finaux pour Cloud Run.

L'utilisation de Firebase Authentication est semblable à celle d'Identity Platform.

  1. Configurez Firebase Authentication dans votre projet et votre service :

    1. Configurez Firebase Authentication dans la console Firebase.

      Accéder à la console Firebase

    2. Importez le SDK Admin Firebase approprié et configurez-le correctement.

    3. Ajoutez un middleware à votre code pour vérifier les jetons d'ID Firebase.

    4. Déployez votre service en mode public.

  2. Dans votre application Web ou mobile, procédez comme suit :

    1. Utilisez la bibliothèque cliente Firebase Authentication appropriée pour obtenir un jeton d'ID :
    2. Incluez le jeton d'ID dans un en-tête Authorization: Bearer ID_TOKEN dans la requête adressée au service.

Pour découvrir un tutoriel détaillé portant sur une application utilisant cette technique d'authentification, suivez le tutoriel sur l'authentification de l'utilisateur final pour Cloud Run.

Obtenir des informations sur un profil utilisateur

Si vous souhaitez accéder aux informations d'un profil utilisateur, vous pouvez utiliser le SDK Admin Firebase pour récupérer des données utilisateur.

Utiliser Google Sign-In

Activez Google Sign-In dans votre projet :

  1. Créez un ID client OAuth 2.0 pour votre application dans le même projet que le service que vous souhaitez sécuriser :
    1. Accédez à la page Identifiants.

      Accéder à la page Identifiants

    2. Sélectionnez le projet avec le service que vous voulez sécuriser.
    3. Cliquez sur Créer des identifiants, puis sélectionnez ID client OAuth.
      1. Vous devrez peut-être configurer votre écran d'autorisation OAuth avant de créer un ID client. Si nécessaire, faites-le pour pouvoir continuer.
    4. Sélectionnez le type d'application pour lequel vous souhaitez créer des identifiants.
    5. Ajoutez un nom et des restrictions, le cas échéant. Cliquez ensuite sur Créer.
  2. Redéployez le service que vous voulez sécuriser pour garantir que l'ID client défini sur le service soit le bon.

    Si vous avez plusieurs ID clients OAuth (par exemple, pour Android, iOS et Web), vous devez redéployer vos services après les avoir ajoutés pour que les modifications soient prises en compte. De même, si vous supprimez un ID client, vous devez redéployer votre service pour supprimer cet ID client et refuser les requêtes. Tous les ID clients d'un projet seront acceptés.

Dans votre application Web ou mobile, procédez comme suit :

  1. Obtenez un jeton d'ID pour l'ID client OAuth :
  2. Incluez le jeton d'ID dans un en-tête Authorization: Bearer ID_TOKEN dans la requête adressée au service.

Cloud Run valide le jeton d'authentification et autorise la requête ou bien la rejette avant le démarrage du service. Si une requête est refusée, elle ne vous sera pas facturée.

Applications Web, authentification et CORS

Lorsque vous créez une application Web, vous devez tenir compte des problèmes de partage de ressources inter-origines (Cross-Origin Resource Sharing, CORS). Par exemple, les requêtes CORS préliminaires sont envoyées sans en-tête Authorization. Elles sont donc refusées sur un service non public. Comme les requêtes préliminaires échouent, la requête principale échouera également.

Pour contourner ce problème, vous pouvez héberger vos services et votre application Web sur le même domaine afin d'éviter les requêtes CORS préliminaires. Vous pouvez pour cela utiliser Firebase Hosting.

Obtenir des informations sur un profil utilisateur

Si vous souhaitez accéder aux informations sur un profil utilisateur, vous pouvez extraire le jeton de l'en-tête Authorization et envoyer une requête au point de terminaison Validate Token.

Le corps du jeton d'ID est renvoyé avec les informations suivantes :

{
 // These six fields are included in all Google ID Tokens.
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953",

 // These seven fields are only included when the user has granted the "profile"
 // and "email" OAuth scopes to the application.
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
}

Dépannage

Si des requêtes utilisateur sont refusées alors qu'elles devraient être autorisées, assurez-vous que le rôle roles/run.invoker a bien été attribué aux utilisateurs ou qu'ils disposent de l'autorisation run.routes.invoke. Consultez la documentation de référence IAM Cloud Run pour vous informer en détail sur ces questions.

Étape suivante

Pour un tutoriel complet sur l'utilisation d'Identity Platform pour l'authentification des utilisateurs finaux, consultez le tutoriel Authentification des utilisateurs finaux pour Cloud Run.