Questo articolo mostra come eseguire l'autenticazione utilizzando i service account quando utilizzi Identity-Aware Proxy (IAP) con identità esterne.
Ottenere l'ID client e il client secret
Vai alla pagina IAP nella console Google Cloud .
Fai clic sulla scheda APPLICAZIONI.
Individua l'app da configurare per utilizzare i service account.
Seleziona Vai alla configurazione OAuth dal menu extra.
Viene visualizzata una pagina che mostra l'ID client e il client secret per la tua app. Ti serviranno per configurare Identity Platform nella sezione successiva.
Configurazione di Google come provider di identità
Se il tuo progetto Identity Platform non utilizza già Google per l'autenticazione, crea una nuova configurazione utilizzando l'ID client e il secret:
Vai alla pagina Provider Identity Platform nella consoleGoogle Cloud .
Vai alla pagina Provider di identitàSe utilizzi la multitenancy di Identity Platform, seleziona il tenant associato alla tua risorsa IAP.
Fai clic su Aggiungi provider.
Seleziona Google dall'elenco dei provider.
In Web SDK configuration (Configurazione SDK web), inserisci l'ID client e il client secret che hai ottenuto nella sezione precedente.
Fai clic su Salva.
Se utilizzi già l'autenticazione Google, puoi utilizzare l'ID client. Questa operazione non interromperà gli utenti esistenti.
Vai alla pagina Provider Identity Platform nella consoleGoogle Cloud .
Vai alla pagina Provider di identitàSe utilizzi la multitenancy di Identity Platform, seleziona il tenant associato alla tua risorsa IAP.
Individua Google nell'elenco dei fornitori e fai clic su Modifica.
Nella sezione 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
Quando esegui l'autenticazione con Google per la prima volta, 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
Body:
{
"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 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, quindi dovrai aggiornare manualmente il controllo dell'accesso della tua app per concedere l'accesso al tuoaccount di serviziont. Per saperne di più, consulta JWT per identità esterne.