Authentification automatisée

Ce document explique comment s'authentifier auprès d'une ressource sécurisée par IAP avec un compte utilisateur ou un compte de service.

L'accès programmatique fait référence à l'appel d'applications sécurisées par IAP à partir de clients autres que des navigateurs, tels que des outils en ligne de commande, des appels de service à service et des applications mobiles. Selon votre cas d'utilisation, vous pouvez vous authentifier auprès d'IAP à l'aide d'identifiants utilisateur ou de service.

  • Un compte utilisateur appartient à un utilisateur individuel. Vous authentifiez un compte utilisateur lorsque votre application doit accéder à des ressources sécurisées par IAP au nom d'un utilisateur. Pour en savoir plus, consultez Comptes utilisateur.

  • Un compte de service représente une application et non un utilisateur individuel. Vous authentifiez un compte de service lorsque vous souhaitez autoriser une application à accéder à vos ressources sécurisées par IAP. Pour en savoir plus, consultez Comptes de service.

IAP est compatible avec les types d'identifiants suivants pour l'accès programmatique :

  • Jeton d'identité OAuth 2.0 : jeton émis par Google pour un utilisateur humain ou un compte de service dont la revendication d'audience est définie sur l'ID de ressource de l'application IAP.
  • JWT signé avec un compte de service : jeton JWT autosigné ou émis par Google pour un compte de service.

Incluez ces identifiants à IAP dans l'en-tête HTTP Authorization ou Proxy-Authorization de la requête.

Avant de commencer

  1. Assurez-vous de disposer d'une application à laquelle vous souhaitez accéder de manière programmatique à l'aide d'un compte de développeur, d'un compte de service ou d'identifiants d'application mobile.

  2. Pour créer un ou plusieurs clients OAuth 2.0, consultez Accès programmatique.

Authentifier un compte utilisateur

Vous pouvez activer l'accès des utilisateurs à votre application depuis une application mobile ou de bureau afin de permettre à un programme d'interagir avec une ressource sécurisée par IAP.

S'authentifier à partir d'une application mobile

  1. Créez ou utilisez un ID client OAuth 2.0 existant pour votre application mobile. Pour utiliser un ID client OAuth 2.0 existant, suivez les étapes décrites dans Partager des clients OAuth. Ajoutez l'ID client OAuth à la liste d'autorisation pour l'accès programmatique à l'application.
  2. Obtenez un jeton d'identité pour l'ID client OAuth 2.0 de la ressource sécurisée par IAP.
  3. Incluez le jeton d'ID dans un en-tête Authorization: Bearer pour envoyer la requête authentifiée à la ressource sécurisée par IAP.

S'authentifier à partir d'une application de bureau

Cette section décrit comment authentifier un compte utilisateur à partir d'une ligne de commande d'ordinateur de bureau.

  1. Pour permettre aux développeurs d'accéder à votre application à partir de la ligne de commande, créez un ID client OAuth 2.0 pour ordinateur ou partagez un ID client OAuth pour ordinateur existant.
  2. Ajoutez l'ID OAuth à la liste d'autorisation pour l'accès programmatique à l'application.

Se connecter à l'application

Chaque développeur doit se connecter pour accéder à une application sécurisée par IAP. Vous pouvez regrouper le processus dans un script, par exemple en utilisant gcloud CLI. L'exemple suivant utilise curl pour se connecter et générer un jeton permettant d'accéder à l'application :

  1. Connectez-vous à votre compte ayant accès à la ressource Google Cloud .
  2. Démarrez un serveur local qui peut renvoyer les requêtes entrantes.

      # Example using Netcat (http://netcat.sourceforge.net/)
      nc -k -l 4444
    
  3. Accédez à l'URI suivant, où DESKTOP_CLIENT_ID correspond à l'ID client de type Application de bureau :

      https://accounts.google.com/o/oauth2/v2/auth?client_id=DESKTOP_CLIENT_ID&response_type=code&scope=openid%20email&access_type=offline&redirect_uri=http://localhost:4444&cred_ref=true
    
  4. Dans le résultat du serveur local, recherchez les paramètres de la requête :

      GET /?code=CODE&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email&hd=google.com&prompt=consent HTTP/1.1
    
  5. Copiez la valeur CODE pour remplacer CODE dans la commande suivante, ainsi que l'ID client et le secret de l'application de bureau :

      curl --verbose \
        --data client_id=DESKTOP_CLIENT_ID \
        --data client_secret=DESKTOP_CLIENT_SECRET \
        --data code=CODE \
        --data redirect_uri=http://localhost:4444 \
        --data grant_type=authorization_code \
        https://oauth2.googleapis.com/token
    

    Cette commande renvoie un objet JSON avec un champ id_token que vous pouvez utiliser pour accéder à l'application.

Accéder à l'application

Pour accéder à l'application, utilisez le champ id_token :

curl --verbose --header 'Authorization: Bearer ID_TOKEN' URL

Jeton d'actualisation

Vous pouvez utiliser le jeton d'actualisation généré lors du flux de connexion pour obtenir de nouveaux jetons d'ID. Cela s'avère utile lorsque le jeton d'identité d'origine expire. Chaque jeton d'identité est valide pendant environ une heure, période au cours de laquelle vous pouvez envoyer plusieurs requêtes à une application spécifique.

L'exemple suivant utilise curl pour obtenir un nouveau jeton d'identité à l'aide du jeton d'actualisation. Dans cet exemple, REFRESH_TOKEN est le jeton du flux de connexion. DESKTOP_CLIENT_ID et DESKTOP_CLIENT_SECRET sont les mêmes que ceux utilisés dans le flux de connexion :

curl --verbose \
  --data client_id=DESKTOP_CLIENT_ID \
  --data client_secret=DESKTOP_CLIENT_SECRET \
  --data refresh_token=REFRESH_TOKEN \
  --data grant_type=refresh_token \
  https://oauth2.googleapis.com/token

Cette commande renvoie un objet JSON avec un nouveau champ id_token que vous pouvez utiliser pour accéder à l'application.

Authentifier un compte de service

Vous pouvez utiliser un jeton JWT de compte de service ou un jeton OpenID Connect (OIDC) pour authentifier un compte de service auprès d'une ressource sécurisée par IAP. Le tableau suivant décrit certaines des différences entre les différents jetons d'authentification et leurs fonctionnalités.

Fonctionnalités d'authentification JWT du compte de service Jeton OpenID Connect
Compatibilité avec l'accès contextuel
Exigence concernant l'ID client OAuth 2.0