Als Endnutzer authentifizieren

In den meisten Situationen empfehlen wir ein Dienstkonto für die Authentifizierung bei einer Google Cloud Platform (GCP) API. In bestimmten Fällen könnten Sie es jedoch vorziehen, dass sich Ihre Nutzer direkt authentifizieren. Beispiel:

  • Sie müssen im Auftrag eines Endnutzers Ihrer Anwendung auf Ressourcen zugreifen. Ihre Anwendung muss beispielsweise auf Google BigQuery-Datasets zugreifen, die Nutzern Ihrer Anwendung gehören.

  • Sie müssen sich als sich selbst anstelle Ihrer Anwendung authentifizieren. Da die Cloud Resource Manager API beispielsweise Projekte erstellen und verwalten kann, die einem bestimmten Nutzer gehören, müssen Sie sich als Nutzer authentifizieren, um Projekte im Namen des Nutzers zu erstellen.

In diesem Leitfaden werden Anmeldedaten von Endnutzern erläutert. Es geht nicht um die Authentifizierung eines Nutzers für Ihre Anwendung. Für diesen Anwendungsfall empfehlen wir Firebase Authentication.

Authentifizierungsvorgang

Wenn eine Anwendung im Auftrag eines Nutzers auf Ressourcen zugreifen muss, zeigt sie ihm einen Zustimmungsbildschirm an. Wenn der Nutzer akzeptiert, fordert Ihre Anwendung Anmeldedaten von einem Autorisierungsserver an. Mit den Anmeldedaten kann die Anwendung im Auftrag des Nutzers auf Ressourcen zugreifen.

Dieser Prozess ist ein Protokoll namens OAuth 2.0.

OAuth 2.0-Flussdiagramm
Ihre App
Zustimmung durch Nutzer
Nutzerdaten

Weitere Informationen zu OAuth 2.0 finden Sie unter OAuth 2.0.

API-Bereiche angeben

Wenn Sie ein Dienstkonto für die Authentifizierung bei einer GCP API verwenden, authentifiziert die GCP das Dienstkonto automatisch mit uneingeschränktem Zugriff auf die API. Bei der Authentifizierung als Endnutzer müssen Sie OAuth-Bereiche manuell angeben. OAuth-Bereiche begrenzen die möglichen Aktionen, die Ihre Anwendung im Namen des Endnutzers ausführen kann. Zu diesen Aktionen kann beispielsweise das Lesen von Dateien aus Cloud Storage oder das Verwalten von GCP-Projekten gehören.

Weitere Informationen dazu, welche OAuth-Bereiche verfügbar sind, finden Sie auf der jeweiligen API-Seite. Wenn Sie beispielsweise die Methode disks.get() für die Compute Engine API verwenden möchten, müssen Sie einen dieser OAuth-Bereiche festlegen. Legen Sie den erforderlichen Mindestumfang entsprechend dem Anwendungsfall fest.

Zugriff auf Projektressourcen gewähren und beschränken

Wenn Sie Anmeldedaten von Endnutzern verwenden, um auf Ressourcen in Ihrem Projekt zuzugreifen, müssen Sie dem Nutzer Zugriff auf Ressourcen innerhalb Ihres Projekts gewähren. Dies können Sie in GCP tun, indem Sie eine Rolle in Google Cloud Identity und Access Management (Cloud IAM) festlegen.

Es kann sinnvoll sein, einzuschränken, auf welche Ressourcen der Nutzer zugreifen kann. Dies gilt insbesondere, wenn Sie dem Nutzer den Zugriff auf Ressourcen in einem Projekt erlauben, das Ihnen gehört. Legen Sie Rollen nach den geringsten Berechtigungen fest, die der Nutzer benötigt.

Für jeden Dienst gibt es eine Reihe von Cloud IAM-Rollen. Außerdem können Sie benutzerdefinierte Rollen erstellen. Weitere Informationen finden Sie unter Informationen zu Rollen und Benutzerdefinierte Rollen erstellen und verwalten.

Beispiel für die Authentifizierung des Endnutzers

Wenn Sie die Anmeldedaten für einen Endnutzer abrufen möchten, führen Sie die folgenden Schritte durch. Obwohl in diesem Beispiel die BigQuery API verwendet wird, können Sie auch jede andere GCP API verwenden, die über eine Clientbibliothek verfügt.

Projekt einrichten

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie in der GCP Console auf der Projektauswahlseite ein GCP-Projekt aus oder erstellen Sie eins.

    Zur Projektauswahl

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist. So bestätigen Sie die Abrechnung für Ihr Projekt.

  4. Aktivieren Sie die BigQueryerforderlichen.

    API aktivieren

  5. Installieren Sie die BigQuery-Clientbibliotheken.
  6. Wenn Sie Python oder Node.js verwenden, müssen Sie eine zusätzliche Authentifizierungsbibliothek installieren.

    Python

    Installieren Sie die oauthlib-Integration für Google Auth.

    pip install --upgrade google-auth-oauthlib

Clientanmeldedaten erstellen

Erstellen Sie Ihre Clientanmeldedaten in der Google Cloud Platform Console.

  1. Wechseln Sie in der GCP Console zur Seite OAuth-Zustimmungbildschirm.

  2. Wählen Sie auf der Seite Anmeldedaten die Schaltfläche Anmeldedaten erstellen und anschließend OAuth-Client-ID aus.

  3. Wählen Sie Andere und anschließend Erstellen aus. Wählen Sie die im angezeigten Dialogfeld für den Erfolg die Schaltfläche OK aus.

  4. Laden Sie die Anmeldedaten herunter. Dazu wählen Sie für die Client-ID die Schaltfläche Download JSON (JSON herunterladen) aus.

    Schaltfläche

  5. Speichern Sie die Datei mit den Anmeldedaten unter client_secrets.json. Diese Datei muss mit Ihrer Anwendung verteilt werden.

Authentifizieren und API aufrufen

  1. Verwenden Sie die Clientanmeldedaten, um den OAuth 2.0-Flow durchzuführen.

    Python

    from google_auth_oauthlib import flow
    
    # TODO: Uncomment the line below to set the `launch_browser` variable.
    # launch_browser = True
    #
    # The `launch_browser` boolean variable indicates if a local server is used
    # as the callback URL in the auth flow. A value of `True` is recommended,
    # but a local server does not work if accessing the application remotely,
    # such as over SSH or from a remote Jupyter notebook.
    
    appflow = flow.InstalledAppFlow.from_client_secrets_file(
        'client_secrets.json',
        scopes=['https://www.googleapis.com/auth/bigquery'])
    
    if launch_browser:
        appflow.run_local_server()
    else:
        appflow.run_console()
    
    credentials = appflow.credentials

  2. Verwenden Sie die authentifizierten Anmeldedaten für die Verbindung zur BigQuery API.

    Python

    from google.cloud import bigquery
    
    # TODO: Uncomment the line below to set the `project` variable.
    # project = 'user-project-id'
    #
    # The `project` variable defines the project to be billed for query
    # processing. The user must have the bigquery.jobs.create permission on
    # this project to run a query. See:
    # https://cloud.google.com/bigquery/docs/access-control#permissions
    
    client = bigquery.Client(project=project, credentials=credentials)
    
    query_string = """SELECT name, SUM(number) as total
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE name = 'William'
    GROUP BY name;
    """
    query_job = client.query(query_string)
    
    # Print the results.
    for row in query_job.result():  # Wait for the job to complete.
        print("{}: {}".format(row['name'], row['total']))

Wenn Sie den Beispielcode ausführen, wird ein Browser gestartet, der Zugriff auf das mit den Clientschlüsseln verbundene Projekt anfordert. Die Anmeldedaten können anschließend verwendet werden, um auf die BigQuery-Ressourcen des Nutzers zuzugreifen, da der Beispielcode den BigQuery-Bereich angefordert hat.

In einem anderen Anwendungsfall könnten Sie zum Beispiel IAM-Rollen hinzufügen, um festzulegen, worauf der Nutzer zugreifen kann.

Weitere Informationen