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
Ve a la página IAP de la Google Cloud consola.
Haz clic en la pestaña APLICACIONES.
Busca la aplicación que quieras configurar para que use cuentas de servicio.
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:
Ve a la página Identity Platform Providers (Proveedores de Identity Platform) en la consola deGoogle Cloud .
Ve a la página Proveedores de identidadesSi usas la función de multitenencia de Identity Platform, selecciona el cliente asociado a tu recurso de IAP.
Haz clic en Añadir proveedor.
Seleccione Google en la lista de proveedores.
En Configuración del SDK web, introduce el ID de cliente y el secreto que has obtenido en la sección anterior.
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.
Ve a la página Identity Platform Providers (Proveedores de Identity Platform) en la consola deGoogle Cloud .
Ve a la página Proveedores de identidadesSi usas la función de multitenencia de Identity Platform, selecciona el cliente asociado a tu recurso de IAP.
Busca Google en la lista de proveedores y haz clic en Editar.
En IDs de cliente permitidos, haz clic en Añadir.
Introduce el ID de cliente que has obtenido en la sección anterior.
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.