Usar cuentas de servicio con identidades externas

En este artículo se explica cómo autenticarte con cuentas de servicio cuando usas Identity-Aware Proxy (IAP) con identidades externas.

Obtener tu ID y secreto de cliente

  1. Ve a la página IAP de la Google Cloud consola.

    Ir a la página de IAP

  2. Haz clic en la pestaña APLICACIONES.

  3. Busca la aplicación que quieras configurar para que use cuentas de servicio.

  4. Selecciona Ir a la configuración de OAuth en el menú adicional.

Aparecerá una página con el ID de cliente y el secreto de tu aplicación. Los necesitarás para configurar Identity Platform en la siguiente sección.

Configurar Google como proveedor de identidades

Si tu proyecto de Identity Platform aún no usa Google para la autenticación, crea una configuración con tu ID de cliente y tu secreto:

  1. Ve a la página Identity Platform Providers (Proveedores de Identity Platform) en la consola deGoogle Cloud .
    Ve a la página Proveedores de identidades

  2. Si usas la función de multitenencia de Identity Platform, selecciona el cliente asociado a tu recurso de IAP.

  3. Haz clic en Añadir proveedor.

  4. Seleccione Google en la lista de proveedores.

  5. En Configuración del SDK web, introduce el ID de cliente y el secreto que has obtenido en la sección anterior.

  6. Haz clic en Guardar.

Si ya utilizas la autenticación de Google, puedes usar tu ID de cliente. Esto no afectará a tus usuarios actuales.

  1. Ve a la página Identity Platform Providers (Proveedores de Identity Platform) en la consola deGoogle Cloud .
    Ve a la página Proveedores de identidades

  2. Si usas la función de multitenencia de Identity Platform, selecciona el cliente asociado a tu recurso de IAP.

  3. Busca Google en la lista de proveedores y haz clic en Editar.

  4. En IDs de cliente permitidos, haz clic en Añadir.

  5. Introduce el ID de cliente que has obtenido en la sección anterior.

  6. Haz clic en Guardar.

Intercambiar un token de Google por un token de Identity Platform

Cuando te autentiques por primera vez con Google, Identity Platform devolverá un token de ID de Google. Después, puedes cambiarlo por un token de Identity Platform llamando a 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

Solicitud:

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"
}

Incluye el token de ID de Identity Platform en el encabezado de autorización para acceder a los recursos mediante IAP:

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

Ten en cuenta que las identidades externas no admiten IAM, por lo que tendrás que actualizar manualmente el control de acceso de tu aplicación para conceder acceso a tu cuenta de servicio. Para obtener más información, consulta JWTs para identidades externas.