Als Endnutzer authentifizieren

In diesem Thema wird erklärt, wie im Namen eines Endnutzers auf Google Cloud APIs zugegriffen werden kann. Allgemeine Informationen zur Authentifizierung bei Google Cloud APIs finden Sie unter Authentifizierung.

Authentifizierungsvorgang

Wenn eine Anwendung im Namen eines Endnutzers auf Google Cloud APIs zugreifen muss, initiiert die Anwendung einen OAuth-Zustimmungsvorgang. Wenn der Nutzer diesen Vorgang abgeschlossen hat, erhält die Anwendung die Anmeldedaten des Nutzers. Mit diesen Anmeldedaten kann Ihre Anwendung dann Google Cloud APIs im Namen des Nutzers aufrufen.

Dieser Vorgang ist ein Protokoll namens OAuth 2.0.

Grafik: OAuth 2.0-Vorgang
Ihre Anwendung
Nutzereinwilligung
Nutzerdaten

Weitere Informationen zu OAuth 2.0 finden Sie unter OAuth 2.0.

OAuth-Bereiche angeben

Bei der Authentifizierung als Endnutzer müssen Sie explizit OAuth-Bereiche 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 Google Cloud-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. Geben Sie den gemäß Anwendungsfall mindestens erforderlichen Bereich an.

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. Legen Sie dazu in Google Cloud eine Rolle in Identity and Access Management (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 IAM-Rollen. Darüber hinaus können Sie auch benutzerdefinierte Rollen erstellen. Weitere Informationen finden Sie unter Informationen zu Rollen und Benutzerdefinierte Rollen erstellen und verwalten.

Beispiel für die Authentifizierung des Endnutzers

Zum Abrufen von Anmeldedaten für einen Endnutzer führen Sie die im Folgenden aufgeführten Schritte aus. In diesem Beispiel wird die BigQuery API verwendet. Der dargestellte Vorgang gilt aber 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, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das 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 als 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 Herstellung der 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 übergebenen Anmeldedaten können anschließend dazu verwendet werden, auf die BigQuery-Ressourcen des Nutzers zuzugreifen, da der Beispielcode den BigQuery-Bereich angefordert hat.

In einem anderen Anwendungsfall ist es eventuell sinnvoller, mithilfe von IAM-Rollen festzulegen, worauf der Nutzer zugreifen kann.

Weitere Informationen