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
Ve a la página de IAP en la consola de Google Cloud.
Haz clic en la pestaña APPLICATIONS.
Busca la aplicación que quieras configurar para usar las cuentas de servicio.
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:
Ve a la página Proveedores de Identity Platform en la console de Google Cloud.
Ir a la página de proveedores de identidadSi estás utilizando multiusuarios de Identity Platform, selecciona la instancia asociada a tu recurso de IAP.
Haz clic en Agregar proveedor.
Selecciona Google de la lista de proveedores.
En Configuración del SDK web, ingresa el ID de cliente y el secreto que obtuviste en la sección anterior.
Haz clic en Guardar.
Si ya usas la autenticación de Google, puedes usar la cuenta de cliente en su lugar. Esto no afectará a tus usuarios existentes.
Ve a la página Proveedores de Identity Platform en la console de Google Cloud.
Ir a la página de proveedores de identidadSi estás utilizando multiusuarios de Identity Platform, selecciona la instancia asociada a tu recurso de IAP.
Encuentra Google en la lista de proveedores y haz clic en Editar.
En IDs de cliente permitidos, haz clic en Agregar.
Ingresa el ID de cliente que obtuviste en la sección anterior.
Haga clic en Save.
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.