Users API für gebündelte Legacy-Dienste

Die Users API ermöglicht einer Anwendung Folgendes:

  • Ermitteln, ob der aktuelle Nutzer angemeldet ist
  • Nutzer zur Anmeldung an die entsprechende Anmeldeseite weiterleiten
  • Anwendungsnutzer zur Erstellung eines neuen Google-Kontos auffordern, sofern sie noch keines haben

Wenn ein Nutzer angemeldet ist, kann die Anwendung auf seine E-Mail-Adresse zugreifen. Die App kann auch erkennen, ob es sich bei dem aktuellen Nutzer um einen Administrator (auch als "Admin-Nutzer" bezeichnet) handelt. Dadurch lassen sich in der Anwendung leicht Bereiche implementieren, die Administratorzugriff voraussetzen. Informationen zum Inhalt des Pakets user finden Sie in der user-Paketreferenz.

Nutzer in Go 1.11 authentifizieren

Im folgenden Beispiel wird ein Nutzer, der sich bei der Anwendung angemeldet hat, mit einer personalisierten Nachricht und einem Link für die Abmeldung begrüßt. Wenn der Nutzer nicht angemeldet ist, zeigt die Anwendung einen Link zur Anmeldeseite für Google-Konten an.

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/user"
)

func welcome(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-type", "text/html; charset=utf-8")
	ctx := appengine.NewContext(r)
	u := user.Current(ctx)
	if u == nil {
		url, _ := user.LoginURL(ctx, "/")
		fmt.Fprintf(w, `<a href="%s">Sign in or register</a>`, url)
		return
	}
	url, _ := user.LogoutURL(ctx, "/")
	fmt.Fprintf(w, `Welcome, %s! (<a href="%s">sign out</a>)`, u, url)
}

Anmeldung und Administratorzugriff mit app.yaml erzwingen

Wenn es Seiten gibt, auf die nur angemeldete Nutzer Zugriff haben sollen, können Sie dies in Ihrer app.yaml-Datei einrichten.

Die Handler-Konfiguration kann auch voraussetzen, dass der Nutzer ein registrierter Administrator für die Anwendung ist. Das heißt, der Nutzer muss die Rolle „Betrachter“, „Bearbeiter“, „Inhaber“ oder „App Engine-Administrator“ haben. So können einfach Websitebereiche erstellt werden, die nur für Administratoren zugänglich sind, ohne dass ein separater Autorisierungsmechanismus implementiert werden muss.

Wie Sie die Authentifizierung für URLs konfigurieren und die Anmeldung oder den Administratorstatus erzwingen, erfahren Sie in der Referenz zu app.yaml.

OAuth in Go

Zusätzlich zu den standardmäßigen Nutzerauthentifizierungsmodi kann Ihre Anwendung Nutzer über OAuth identifizieren. OAuth ist ein Protokoll, mit dem Nutzer Dritten in ihrem Namen eingeschränkten Zugriff auf eine Webanwendung gewähren können, ohne dabei ihre Anmeldedaten (Nutzername und Passwort) weitergeben zu müssen. Weitere Informationen zur OAuth API, einschließlich der von Clients benötigten Interaktion, finden Sie in der OAuth-Dokumentation.

Beachten Sie, dass die Authentifizierung Ihrer Nutzer mit OAuth vollständig orthogonal zu den standardmäßigen Nutzerauthentifizierungsmodi stattfindet. Beispielsweise werden Seiten, die mit login: required oder login: admin markiert sind, nicht geladen, wenn der Nutzer nur über OAuth authentifiziert wird.

Im Folgenden finden Sie ein einfaches Beispiel für den Zugriff auf OAuth-Nutzerinformationen in einem Go-Anfrage-Handler:

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/user"
)

func welcomeOAuth(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	u, err := user.CurrentOAuth(ctx, "")
	if err != nil {
		http.Error(w, "OAuth Authorization header required", http.StatusUnauthorized)
		return
	}
	if !u.Admin {
		http.Error(w, "Admin login only", http.StatusUnauthorized)
		return
	}
	fmt.Fprintf(w, `Welcome, admin user %s!`, u)
}

Authentifizierungsoptionen

Nutzer können von der Anwendung über eine der folgenden Optionen authentifiziert werden:

  • Google-Konto
  • Konto in Ihrer Google Workspace-Domain

Authentifizierungsoption auswählen

Nachdem Sie die Anwendung erstellt haben, können Sie die gewünschte Authentifizierungsoption auswählen. Standardmäßig verwendet Ihre Anwendung für die Authentifizierung Google-Konten. Wenn Sie eine andere Option auswählen möchten, z. B. die Google Workspace-Domain, rufen Sie in der Google Cloud Console die Seite Einstellungen Ihres Projekts auf und klicken Sie auf Bearbeiten. Wählen Sie im Drop-down-Menü Google-Authentifizierung den gewünschten Authentifizierungstyp aus und klicken Sie dann auf Speichern.

An- und Abmelden

Eine Anwendung kann erkennen, ob sich ein Nutzer mit der für die Anwendung ausgewählten Authentifizierungsoption angemeldet hat. Wenn der Nutzer nicht angemeldet ist, kann die Anwendung den Nutzer zur Seite für Google-Konten weiterleiten, wo er sich anmelden oder ein neues Google-Konto erstellen kann. Die Anwendung ruft die URL für die Anmeldeseite ab, indem sie eine Methode der Users API aufruft. Die Anwendung kann diese URL als Link anzeigen oder eine HTTP-Weiterleitung zur URL ausgeben, wenn Nutzer eine Seite besuchen, für die eine Authentifizierung erforderlich ist.

Verwendet Ihre Anwendung Google-Konten oder Google Workspace für die Authentifizierung, wird der Name der Anwendung auf der Anmeldeseite angezeigt, wenn sich der Nutzer bei dieser Anwendung anmeldet. Der angezeigte Name ist der Anwendungsname, den Sie bei der Registrierung der Anwendung angegeben haben. Sie können diesen Namen in der Google Cloud Console auf der Seite Anmeldedaten im Feld Anwendungsname ändern.

Sobald Nutzer sich angemeldet oder ein Google-Konto erstellt haben, werden sie zurück zur Anwendung geleitet. Die Anwendung stellt die Weiterleitungs-URL für die Methode bereit, mit der die Anmelde-URL generiert wird.

Die Users API verfügt auch über eine Methode für die Generierung einer URL zur Abmeldung von der Anwendung. Mit der Abmelde-URL wird die Authentifizierung von Nutzern für die Anwendung rückgängig gemacht und sie werden zur Anwendungs-URL weitergeleitet, ohne dass etwas angezeigt wird.

Nutzer werden erst dann bei der Anwendung angemeldet, wenn sie von der Anwendung dazu aufgefordert werden und die E-Mail-Adresse sowie das Passwort ihres Kontos eingeben. Das gilt auch dann, wenn sich Nutzer mit ihrem Google-Konto bei anderen Anwendungen angemeldet haben.

Kontoinformationen abrufen

Wenn ein Nutzer bei einer Anwendung angemeldet ist, kann diese bei jeder Nutzeranfrage an die Anwendung auf die E-Mail-Adresse des Kontos zugreifen. Die Anwendung kann auch auf eine Nutzer-ID zugreifen, um den Nutzer auch dann eindeutig zu identifizieren, wenn sich die E-Mail-Adresse seines Kontos geändert hat.

Die Anwendung kann auch erkennen, ob der aktuelle Nutzer ein Administrator der Anwendung ist. Ein Administrator ist ein Nutzer, der die Rolle „Betrachter“, „Bearbeiter“, „Inhaber“ oder „App Engine-Administrator“ hat. Sie können dieses Feature zum Erstellen administrativer Features für die Anwendung verwenden, auch wenn Sie keine anderen Nutzer authentifizieren. Mit den APIs für Go, Java, PHP und Python können Sie URLs „nur für Administratoren“ konfigurieren.

Google-Konten und der Entwicklungsserver

Der Entwicklungsserver simuliert das Google-Kontensystem mit einem unechten Anmeldebildschirm. Wenn die Anwendung die Users API aufruft, um die URL für den Anmeldebildschirm zu erhalten, gibt die API eine spezielle URL für den Entwicklungsserver zurück, mit der eine E-Mail-Adresse, jedoch kein Passwort angefordert wird. Sie können bei dieser Aufforderung eine beliebige E-Mail-Adresse eingeben. Die Anwendung verhält sich so, als seien Sie mit einem Konto angemeldet, zu dem diese Adresse gehört.

Der fiktive Anmeldebildschirm enthält auch ein Kästchen, mit dem festgelegt werden kann, dass das fiktive Konto ein Administratorkonto ist, also die Rolle „Betrachter“, „Bearbeiter“, „Inhaber“ oder „App Engine-Administrator“ hat. Wenn Sie dieses Kästchen anklicken, verhält sich die Anwendung so, als seien Sie mit einem Administratorkonto angemeldet.

Entsprechend gibt die Users API eine Abmelde-URL zurück, mit der die unechte Anmeldung abgebrochen wird.