Dienstkonten mit externen Identitäten verwenden

In diesem Artikel wird gezeigt, wie die Authentifizierung mit Dienstkonten funktioniert, wenn Sie Identity-Aware Proxy (IAP) mit externen Identitäten verwenden.

Client-ID und Secret abrufen

  1. Rufen Sie in der Cloud Console die Seite "IAP" auf.

    Zur Seite "IAP".

  2. Klicken Sie auf den Tab HTTP-Ressourcen.

  3. Ermitteln Sie die Anwendung, die Sie für die Verwendung von Dienstkonten konfigurieren möchten.

  4. Wählen Sie im Dreipunkt-Menü die Option Client-ID anzeigen aus.

Daraufhin wird eine Seite mit der Client-ID und mit dem Secret für Ihre Anwendung angezeigt. Diese Informationen benötigen Sie für das Konfigurieren von Identity Platform im nächsten Abschnitt.

Google als Identitätsanbieter konfigurieren

Wenn Ihr Identity Platform-Projekt zur Authentifizierung noch nicht Google verwendet, erstellen Sie mit Ihrer Client-ID und mit Ihrem Secret eine neue Konfiguration:

  1. Rufen Sie in der Cloud Console die Seite Identitätsanbieter auf.
    Zur Seite "Identitätsanbieter"

  2. Wenn Sie die Mehrinstanzenfähigkeit von Identity Platform verwenden, wählen Sie den Mandant aus, der Ihrer IAP-Ressource zugeordnet ist.

  3. Klicken Sie auf Anbieter hinzufügen.

  4. Wählen Sie Google aus der Liste der Anbieter aus.

  5. Geben Sie unter Web-SDK-Konfiguration die Client-ID und das Secret ein, die bzw. das Sie im vorherigen Abschnitt abgerufen haben.

  6. Klicken Sie auf Speichern.

Wenn Sie die Google-Authentifizierung bereits verwenden, können Sie stattdessen Ihre Client-ID auf die weiße Liste setzen. Dies hat keinerlei Auswirkungen auf Ihre bestehenden Nutzer.

  1. Rufen Sie in der Cloud Console die Seite Identitätsanbieter auf.
    Zur Seite "Identitätsanbieter"

  2. Wenn Sie die Mehrinstanzenfähigkeit von Identity Platform verwenden, wählen Sie den Mandant aus, der Ihrer IAP-Ressource zugeordnet ist.

  3. Suchen Sie Google in der Liste der Anbieter und klicken Sie auf Bearbeiten.

  4. Klicken Sie unter Client-IDs auf der weißen Liste auf Hinzufügen.

  5. Geben Sie die Client-ID ein, die Sie im vorherigen Abschnitt abgerufen haben.

  6. Klicken Sie auf Speichern.

Google-Tokens gegen Identity Platform-Token tauschen

Wenn Sie sich erstmals bei Google authentifizieren, gibt Identity Platform ein Google-ID-Token zurück. Sie können dieses Token dann gegen ein Identity Platform-Token tauschen. Dazu rufen Sie signInWithIdp auf:

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

Anfrage:

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=API-KEY

Anfragetext:

{
"postBody":"id_token=GOOGLE-ID-TOKEN&providerId=google.com"
"requestUri": "http://localhost",
"returnIdpCredential": true,
"returnSecureToken": true,
"tenantId": "TENANT-ID"
}

Fügen Sie das Identity Platform-ID-Token in den Autorisierungs-Header ein, um über IAP auf Ressourcen zugreifen zu können:

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

Externe Identitäten unterstützen kein IAM. Daher müssen Sie die Zugriffssteuerung Ihrer Anwendung manuell aktualisieren, um Zugriff auf Ihr Dienstkonto zu gewähren. Weitere Informationen finden Sie unter JWTs für externe Identitäten.