Utilizzo di account di servizio con identità esterne

Questo articolo spiega come eseguire l'autenticazione utilizzando gli account di servizio quando utilizzi Identity-Aware Proxy (IAP) con identità esterne.

Ottenere l'ID client e il secret

  1. Vai alla pagina IAP nella console Google Cloud.

    Vai alla pagina IAP

  2. Fai clic sulla scheda APPLICAZIONI.

  3. Individua l'app da configurare per utilizzare gli account di servizio.

  4. Seleziona Vai alla configurazione OAuth dal menu extra.

Viene visualizzata una pagina che mostra l'ID client e il client secret della tua app. Ti serviranno per configurare Identity Platform nella prossima sezione.

Configurare Google come provider di identità

Se il tuo progetto Identity Platform non utilizza già Google per autenticazione, crea una nuova configurazione utilizzando il tuo ID client e il tuo secret:

  1. Vai alla pagina Identity Platform Providers nella nella console Google Cloud.
    Vai alla pagina Provider di identità

  2. Se utilizzi Identity Platform multi-tenancy, seleziona il tenant associate alla tua risorsa IAP.

  3. Fai clic su Aggiungi provider.

  4. Seleziona Google dall'elenco dei provider.

  5. In Configurazione SDK web, inserisci l'ID client e il secret che hai ottenuto nella sezione precedente.

  6. Fai clic su Salva.

Se utilizzi già l'autenticazione Google, puoi utilizzare l'ID client. Questa operazione non influirà sugli utenti esistenti.

  1. Vai alla pagina Provider di Identity Platform nella console Google Cloud.
    Vai alla pagina Provider di identità

  2. Se utilizzi la multitenancy di Identity Platform, seleziona il tenant associato alla risorsa IAP.

  3. Individua Google nell'elenco dei fornitori e fai clic su Modifica.

  4. In ID client consentiti, fai clic su Aggiungi.

  5. Inserisci l'ID client che hai ottenuto nella sezione precedente.

  6. Fai clic su Salva.

Scambio di un token Google con un token Identity Platform

Al primo accesso con Google, Identity Platform restituirà un token ID Google. Quindi puoi scambiarlo con un token di Identity Platform chiamando 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

Richiesta:

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

Includi il token ID Identity Platform nell'intestazione di autorizzazione per accedere alle risorse tramite IAP:

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

Tieni presente che le identità esterne non supportano IAM, pertanto dovrai aggiornare manualmente il controllo degli accessi dell'app per concedere l'accesso al tuo account di servizio. Consulta JWT per le identità esterne per saperne di più.