Usa cuentas de servicio con identidades externas

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

Obtén tu ID de cliente y tu secreto

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

    Ir a la página de IAP

  2. Haz clic en la pestaña Aplicaciones.

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

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

Aparece una página que muestra el ID de cliente y el secreto de tu aplicación. Las necesitarás para configurar Identity Platform en la siguiente sección.

Configura Google como proveedor de identidad

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

  1. Ve a la página Proveedores de Identity Platform en la consola de Google Cloud.
    Ir a la página de proveedores de identidad

  2. Si estás utilizando multiusuarios de Identity Platform, selecciona la instancia asociada a tu recurso de IAP.

  3. Haz clic en Agregar proveedor.

  4. Selecciona Google de la lista de proveedores.

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

  6. Haz clic en Guardar.

Si ya usas la autenticación de Google, puedes usar tu ID de cliente en su lugar. Esto no afectará a tus usuarios existentes.

  1. Ve a la página Proveedores de Identity Platform en la consola de Google Cloud.
    Ir a la página de proveedores de identidad

  2. Si estás utilizando multiusuarios de Identity Platform, selecciona la instancia asociada a tu recurso de IAP.

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

  4. En IDs de cliente permitidos, haz clic en Agregar.

  5. Ingresa el ID de cliente que obtuviste en la sección anterior.

  6. Haz clic en Guardar.

Intercambia un token de Google por un token de Identity Platform

La primera vez que realices la autenticación con Google, Identity Platform mostrará un token de ID de Google. Luego, puedes canjearlo por un token de Identity Platform si llamas 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

Cuerpo:

{
"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 tu 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 son compatibles con IAM, por lo que tendrás que actualizar manualmente el control de acceso de tu aplicación para otorgar acceso a tu cuenta de servicio. Consulta JWT para identidades externas a fin de obtener más información.