Questo articolo mostra come eseguire l'autenticazione utilizzando gli account di servizio quando utilizzi Identity-Aware Proxy (IAP) con identità esterne.
Recupero del tuo ID client e del tuo secret
Vai alla pagina IAP in Google Cloud Console.
Fai clic sulla scheda Risorse HTTP.
Individua l'app da configurare per utilizzare gli account di servizio.
Seleziona Mostra ID client dal menu extra.
Viene visualizzata una pagina che mostra l'ID client e il client secret della tua app. Ne avrai bisogno per configurare Identity Platform nella sezione successiva.
Configurazione di Google come provider di identità
Se il progetto Identity Platform non utilizza già Google per l'autenticazione, crea una nuova configurazione utilizzando il tuo ID client e il tuo secret:
Vai alla pagina Identity Platform Providers (Provider piattaforma di Identity) in Google Cloud Console.
Vai alla pagina Provider di identitàSe utilizzi la multi-tenancy di Identity Platform, seleziona il tenant associato alla tua risorsa IAP.
Fai clic su Aggiungi provider.
Seleziona Google dall'elenco dei fornitori.
In Configurazione SDK web, inserisci l'ID client e il secret che hai ricevuto nella sezione precedente.
Fai clic su Salva.
Se utilizzi già l'autenticazione Google, puoi utilizzare il tuo ID client. In questo modo non influirà i tuoi utenti esistenti.
Vai alla pagina Identity Platform Providers (Provider piattaforma di Identity) in Google Cloud Console.
Vai alla pagina Provider di identitàSe utilizzi la multi-tenancy di Identity Platform, seleziona il tenant associato alla tua risorsa IAP.
Individua Google nell'elenco dei fornitori e fai clic su Modifica.
In ID client consentiti, fai clic su Aggiungi.
Inserisci l'ID client ottenuto nella sezione precedente.
Fai clic su Salva.
Scambio di un token Google con un token Identity Platform
La prima volta che esegui l'autenticazione con Google, Identity Platform restituisce
un token ID Google. Puoi quindi scambiarlo con un token 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
Corpo:
{ "postBody":"id_token=GOOGLE-ID-TOKEN&providerId=google.com" "requestUri": "http://localhost", "returnIdpCredential": true, "returnSecureToken": true, "tenantId": "TENANT-ID" }
Includi il token ID di Identity Platform nell'intestazione dell'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, quindi dovrai aggiornare manualmente il controllo dell'accesso della tua app per concedere l'accesso al tuo account di servizio. Per saperne di più, consulta i JWT per le identità esterne.