Utiliser des comptes de service avec des identités externes

Cet article vous explique comment vous authentifier à l'aide de comptes de service lorsque vous utilisez Identity-Aware Proxy (IAP) avec des identités externes.

Obtenir vos code secret et ID client

  1. Accédez à la page "IAP" dans la console Google Cloud.

    Accéder à la page IAP

  2. Cliquez sur l'onglet APPLICATIONS.

  3. Localisez l'application à configurer pour utiliser les comptes de service.

  4. Sélectionnez Go to OAuth configuration (Accéder à la configuration OAuth) dans le menu à développer.

Une page contenant le code secret et l'ID client de votre application s'affiche. Vous en aurez besoin pour configurer Identity Platform à la section suivante.

Configurer Google en tant que fournisseur d'identité

Si votre projet Identity Platform n'utilise pas encore Google pour l'authentification, créez une configuration à l'aide de vos code secret et ID client :

  1. Accédez à la page Fournisseurs Identity Platform dans la console Google Cloud.
    Accéder à la page "Fournisseurs d'identité"

  2. Si vous utilisez l'architecture mutualisée d'Identity Platform, sélectionnez le locataire associé à votre ressource IAP.

  3. Cliquez sur Ajouter un fournisseur.

  4. Sélectionnez Google dans la liste des fournisseurs.

  5. Sous Configuration du SDK Web, saisissez les code secret et ID client que vous avez obtenus à la section précédente.

  6. Cliquez sur Enregistrer.

Si vous utilisez déjà l'authentification Google, vous pouvez utiliser votre ID client à la place. Cela ne perturbera pas vos utilisateurs existants.

  1. Accédez à la page Fournisseurs Identity Platform dans la console Google Cloud.
    Accéder à la page "Fournisseurs d'identité"

  2. Si vous utilisez l'architecture mutualisée d'Identity Platform, sélectionnez le locataire associé à votre ressource IAP.

  3. Recherchez Google dans la liste des fournisseurs, puis cliquez sur Modifier.

  4. Sous ID client autorisés, cliquez sur Ajouter.

  5. Saisissez l'ID client que vous avez obtenu à la section précédente.

  6. Cliquez sur Enregistrer.

Remplacer un jeton Google par un jeton Identity Platform

Lorsque vous vous authentifiez pour la première fois avec Google, Identity Platform renvoie un jeton d'ID Google. Vous pouvez ensuite le remplacer par un jeton Identity Platform en appelant signInWithIdp :

Node.js

import * as firebase from 'firebase/app';
import 'firebase/auth';

const config = {
  apiKey: '...',
};
firebase.initializeApp(config);
const cred = firebase.auth.GoogleAuthProvider.credential(google_oidc_id_token);
firebase.auth().signInWithCredential(cred)
  .then((userCredential) => {
    return userCredential.user.getIdToken();
  })
  .then((gcipIdToken) => {
    // This token can now be used to access the resource.
  })
  .catch((error) => {
    // Error occurred.
  });

Python

SIGN_IN_WITH_IDP_API = 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp'

def exchange_google_id_token_for_gcip_id_token(api_key, tenant_id, google_open_id_connect_token):
  url = SIGN_IN_WITH_IDP_API + '?key=' + api_key
  data={'requestUri': 'http://localhost',
        'returnSecureToken': True,
        'postBody':'id_token=' + google_open_id_connect_token + '&providerId=google.com',
        'tenantId': tenant_id}
  resp = requests.post(url, data)
  res = resp.json()
  return res['idToken']

REST

Requête :

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=API-KEY

Body:

{
"postBody":"id_token=GOOGLE-ID-TOKEN&providerId=google.com"
"requestUri": "http://localhost",
"returnIdpCredential": true,
"returnSecureToken": true,
"tenantId": "TENANT-ID"
}

Incluez le jeton d'ID Identity Platform dans votre en-tête d'autorisation pour accéder aux ressources sécurisées par IAP :

curl -H "Authorization: Bearer GCIP-ID-TOKEN" "https://example.appspot.com/api"

Notez que les identités externes ne sont pas compatibles avec IAM. Vous devez donc mettre à jour manuellement le contrôle d'accès de votre application afin d'accorder l'accès à votre compte de service. Pour en savoir plus, consultez la section Jetons JWT pour les identités externes.