Users API 允许应用执行以下操作:
- 检测当前用户是否已登录。
- 将用户重定向到相应的登录页面进行登录。
- 要求您的应用用户创建新的 Google 账号(如果用户尚无 Google 账号)。
用户登录应用后,应用可以访问用户的电子邮件地址。应用还可以检测当前用户是否为管理员(也称为“管理员用户”),从而轻松实现仅管理员能够访问的应用区域。
Java 8 中的用户身份验证
以下示例在用户登录后向其展示个性化消息和退出登录链接。如果用户没有登录,则应用会提供 Google 账号的登录页面链接。
借助请求对象的 getUserPrincipal()
方法,并结合使用标准 servlet API,您可以测试用户是否已登录,并获取用户的电子邮件地址。您可以使用用户服务 API 来生成登录和退出登录网址。
User Service API 可将当前用户的信息返回为 User 对象。虽然 User 对象可以作为属性值存储在数据存储区中,但我们强烈建议您不要这样做,因为此操作会将电子邮件地址和用户的唯一 ID 也包含在内。如果用户更改了其电子邮件地址,当您将其存储的旧 User
与新 User
值进行比较时,它们将无法匹配。请改为考虑将 User
用户 ID 值用作用户的固定唯一标识符。
使用 web.xml 强制执行登录和管理员访问
如果您希望用户只有在登录后才能访问某些页面,可在部署描述符(web.xml
文件)中为这些页面建立安全约束。如果用户访问具有安全约束的网址,并且用户没有登录,则 App Engine 会自动将用户重定向到登录页面(登录 Google 账号或进行 Google Workspace 身份验证),然后在成功登录或注册后,将用户重新导回到该网址。
安全限制条件还可以要求用户必须是应用的注册管理员;也就是说,用户必须具有 Viewer、Editor、Owner 或 App Engine Admin 角色。这样一来,您无需实现单独的授权机制,即可构建仅限管理员访问的网站区域。
如需了解如何为网址设置安全约束,请参阅 web.xml
的“部署描述符:安全和身份验证”。
身份验证选项
您的应用可以使用以下选项之一来验证身份用户:
- 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,可以轻松将网址配置为“仅限管理员访问”。
用户和数据存储区
Users Service API 可将当前用户的信息返回为 User 对象。虽然 User 对象可以作为属性值存储在数据存储区中,但我们强烈建议您不要这样做,因为此操作会将电子邮件地址和用户的唯一 ID 也包含在内。如果用户更改了其电子邮件地址,当您将其存储的旧 User
与新 User
值进行比较时,它们将无法匹配。请改为考虑将 User
用户 ID 值用作用户的固定唯一标识符。
Google 账号和开发服务器
开发服务器使用虚构登录屏幕来模拟 Google 账号系统。当应用调用 Users API 以获取登录屏幕网址时,该 API 会返回一个特殊开发服务器网址来提示用户输入电子邮件地址,但不提示输入密码。您可以在此提示中输入任何电子邮件地址,而应用将表现得就像您使用了拥有该地址的账号进行了登录。
虚构登录屏幕还提供一个复选框,用于指明虚构账号是否为管理员;也就是说,该账号是否具有 Viewer、Editor、Owner 或 App Engine Admin 角色。如果您勾选此复选框,则应用将表现得就像您使用了管理员账号进行了登录。
同样,Users API 返回一个用于取消虚构登录的退出登录网址。