Als Endnutzer authentifizieren

In den meisten Situationen empfehlen wir, für die Authentifizierung bei einer Google Cloud API ein Dienstkonto zu verwenden. 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 beispielsweise die Resource Manager API Projekte erstellen und verwalten kann, die einem bestimmten Nutzer gehören, müssen Sie sich als Nutzer authentifizieren, um Projekte in deren Namen 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.

Grafik: OAuth 2.0-Prozess
Ihre Anwendung
Nutzereinwilligung
Nutzerdaten

Weitere Informationen zu OAuth 2.0 finden Sie unter OAuth 2.0.

API-Bereiche angeben

Wenn Sie ein Dienstkonto zur Authentifizierung bei einer Google Cloud API verwenden, authentifiziert Google Cloud automatisch das Dienstkonto 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. Diese Aktionen können beispielsweise das Lesen von Dateien aus Cloud Storage oder die Verwaltung von Google Cloud-Projekten umfassen.

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 minimal erforderlichen Bereich 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. Das können Sie in Google Cloud tun. Legen Sie dazu eine Rolle in Cloud Identity und Access Management (Cloud IAM) fest.

Es kann sinnvoll sein, den Zugriff auf Ressourcen einzuschränken. 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, gilt dieser Vorgang ähnlich für jede andere Google Cloud API mit einer Clientbibliothek.

Projekt einrichten

  1. Melden Sie sich bei 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 Cloud Console auf der Projektauswahlseite ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Aktivieren Sie die BigQuery API.

    Aktivieren Sie die API

  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 Console.

  1. Rufen Sie in der Cloud Console die Seite OAuth-Zustimmungsbildschirm auf.

  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 Cloud IAM-Rollen gewähren, um festzulegen, worauf der Nutzer zugreifen kann.

Nächste Schritte