适用于旧版捆绑服务的 Users API

Users API 允许应用执行以下操作:

  • 检测当前用户是否已登录。
  • 将用户重定向到相应的登录页面进行登录。
  • 要求您的应用用户创建新的 Google 账号(如果用户尚无 Google 账号)。

用户登录应用后,应用可以访问用户的电子邮件地址。应用还可以检测当前用户是否为管理员(也称为“管理员用户”),从而轻松实现仅管理员能够访问的应用区域。如需查看 user 软件包的内容,请参阅 user 软件包参考文档

Go 1.11 中的用户身份验证

以下示例在用户登录后向其展示个性化问候消息和一个退出登录的链接。如果用户没有登录,则应用会提供 Google 账号的登录页面链接。

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)
}

使用 app.yaml 强制要求登录和具备管理员权限

如果您的某些页面要求用户登录才能访问,您可以在 app.yaml 文件中强制执行此操作。

处理程序配置还可以要求用户必须是应用的注册管理员;也就是说,用户必须具有 Viewer、Editor、Owner 或 App Engine Admin 角色。这样一来,您无需实现单独的授权机制,即可构建仅限管理员访问的网站区域。

如需了解如何为网址配置身份验证,请参阅 app.yaml 参考文档中有关如何要求用户登录或具备管理员身份的内容。

在 Go 中使用 OAuth

除了标准用户身份验证模式之外,还可以通过 OAuth 为您的应用识别用户。OAuth 是一种协议,允许用户向第三方授予代表其访问网页应用的有限权限,而无需与第三方共享凭据(用户名和密码)。如需详细了解 OAuth API(包括客户端所需的互动),请参阅 OAuth 文档

请注意,使用 OAuth 识别用户与使用标准用户身份验证模式完全正交。例如,如果用户仅通过 OAuth 进行身份验证,则标有 login: requiredlogin: admin 的页面将拒绝加载。

以下是在 Go 请求处理程序中访问 OAuth 用户信息的简单示例:

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)
}

身份验证选项

您的应用可以使用以下选项之一来验证身份用户:

  • Google 账号
  • 您的 Google Workspace 网域中的账号

选择身份验证选项

在创建应用后,您可以选择要使用的身份验证选项。默认情况下,您的应用将使用 Google 账号进行身份验证。如需选择其他选项(如 Google Workspace 网域),请在 Google Cloud 控制台中前往项目的设置页面,然后点击修改。在“Google 身份验证”下拉菜单中,选择所需的身份验证类型,然后点击保存

登录和退出登录

应用可以检测用户是否已使用应用所选的身份验证选项来登录应用。如果用户没有登录,则应用可以将用户定向到 Google 账号进行登录或者创建新的 Google 账号。应用通过调用 Users API 的方法获取登录页面的网址。当用户访问需要进行身份验证的页面时,应用可以将此网址显示为链接,也可以发出到此网址的 HTTP 重定向。

如果您的应用使用 Google 账号或 Google Workspace 进行身份验证,则应用的名称会在用户登录您的应用时显示在登录页面。所显示的名称是您在注册应用时指定的应用名称。您可以在 Google Cloud 控制台凭据页面的应用名称字段中更改此名称。

用户登录或创建 Google 账号后,会被重定向回您的应用。应用提供了指向生成登录网址的方法的重定向网址。

Users API 还提供一个生成网址供退出应用登录的方法。退出登录网址会从应用中撤消用户的身份验证,然后重定向回应用网址,但不显示任何内容。

用户只有在应用提示登录,并输入其账号的电子邮件地址和密码后,才能登录应用。即使用户已使用 Google 账号登录其他应用,也是如此。

访问账号信息

当用户登录应用时,应用可以访问其账号的电子邮件地址,以获取用户对应用发出的每个请求。应用还可以访问唯一标识用户的用户 ID,即使用户更改了账号的电子邮件地址也是如此。

应用还可以确定当前用户是否为应用的管理员。“管理员”用户是指具有 Viewer、Editor、Owner 或 App Engine Admin 角色的任何用户。即使您不验证其他用户的身份,也可以使用此功能为应用创建管理功能。通过 Go、Java、PHP 和 Python API,可以轻松将网址配置为“仅限管理员访问”。

Google 账号和开发服务器

开发服务器使用虚构登录屏幕来模拟 Google 账号系统。当应用调用 Users API 以获取登录屏幕网址时,该 API 会返回一个特殊开发服务器网址来提示用户输入电子邮件地址,但不提示输入密码。您可以在此提示中输入任何电子邮件地址,而应用将表现得就像您使用了拥有该地址的账号进行了登录。

虚构登录屏幕还提供一个复选框,用于指明虚构账号是否为管理员;也就是说,该账号是否具有 Viewer、Editor、Owner 或 App Engine Admin 角色。如果您勾选此复选框,则应用将表现得就像您使用了管理员账号进行了登录。

同样,Users API 返回一个用于取消虚构登录的退出登录网址。