简介
使用 Google 账号登录 (SiwG) 是一种快速且安全的用户登录应用或网站的方式。正确实现它不仅可以简化用户注册流程,还可以提高应用的安全性。本文档概述了在 Web、Android 和 iOS 平台中集成“使用 Google 账号登录”功能的最佳实践。本文档仅重点介绍身份验证。授权不在本文档的讨论范围之内。
集成里程碑核对清单
此核对清单提供了一个大致的路线图,可指导您完成“通过 Google 账号登录”集成流程。它分为几个关键阶段,从初始设置到发布生产版本。您可以使用此列表跟踪自己的进度,并点击相应链接跳转到每个里程碑的详细指南。
阶段 0:准备工作(可选)
通过实用的分步开发者 Codelab 快速开始集成。
Web:完成一键登录和“使用 Google 账号登录”按钮 Codelab,以构建基本的 Web 集成。
Android:完成 Android Codelab,了解 Android 的 Credential Manager 的基础知识。
iOS:完成 iOS Codelab,了解 iOS SDK 的基本知识。
第 1 阶段:Google Cloud 项目和品牌配置
确保您的项目从一开始就已做好充分准备。
完成 OAuth 权限请求页面配置,提供所有必需的品牌推广和支持信息。
为每个平台(Web、Android、iOS)创建正确的 OAuth 客户端 ID 类型。
第 2 阶段:核心开发:前端和后端
构建安全的服务器逻辑和特定于平台的用户体验。
在前端开发中:
查看并应用用户体验 (UX) 最佳实践,以最大限度地提高用户采用率和信任度。
Web:使用官方 JavaScript 库,并集成按钮和一键快捷功能流程。
Android:使用官方 Android SDK 进行集成。
iOS:使用官方 iOS SDK 进行集成。
在后端开发中:
在您的系统中使用 sub 声明作为唯一且永久的用户标识符。
规划身份验证和授权范围的分离(如果适用)。
第 3 阶段:安全加固和发布正式版
确保您的集成安全、合规且已做好生产准备。
查看并实施安全性最佳实践。
在发布之前,完成 OAuth 应用验证流程。
确保您的应用在用户账号删除时正确处理令牌撤消。
常规最佳实践(所有平台)
无论您是为哪个平台进行开发,这些实践都适用。 开发者还应查看一般 OAuth 2.0 政策,以确保完全合规。
Google Cloud 项目设置
本部分概述了以下方面的最佳实践:构建 Google Cloud 项目,以及设置 OAuth 客户端以确保安全性和品牌宣传合规性。
为测试和生产环境使用单独的项目
由于某些 Google 政策仅适用于生产应用,因此您必须在 Google Cloud 控制台中为不同的部署环境(例如开发、预演和生产环境)创建单独的项目。如需了解详情,请参阅此页面。
为每个品牌或网域使用单独的项目
如果您的组织管理多个具有不同品牌的应用,则每个品牌都应有自己的专用 Google Cloud 项目。权限请求页面上显示的用户相关信息(例如应用名称、徽标、支持电子邮件地址以及指向服务条款和隐私权政策的链接)是在项目级配置的。这意味着,在单个项目中创建的所有 OAuth 客户端 ID 将共享同一品牌。为每个品牌提供自己的项目可确保用户看到所用特定应用的正确品牌和法律信息。
提供常规支持电子邮件地址
用户支持电子邮件地址会公开显示在 OAuth 权限请求页面上。为保持专业性并确保服务的连续性,请务必在 Google Cloud 项目的 OAuth 权限请求页面配置中配置通用的支持电子邮件地址(例如
support@yourdomain.com),而不是个别员工的电子邮件地址。如需了解详情,请参阅此页面。每个平台的 OAuth 客户端
您应在同一 Google Cloud 项目中,为应用运行的每个平台(例如 Web、Android、iOS)创建单独的 OAuth 客户端。针对每个平台使用正确的客户端类型至关重要,原因有以下两点:
- 增强的安全性:每种客户端类型都支持特定于平台的安全功能。例如,可以通过 Android 客户端的软件包名称和签名证书锁定该客户端,防止未经授权使用您的客户端 ID。
- 正常的功能:确保您的应用正确集成平台专用的 SDK 和功能,例如 Android 上的凭据管理器或 iOS 的“使用 Google 账号登录”SDK。
这种结构还简化了用户体验。由于同意情况是在 Google Cloud 项目级层处理的,因此用户只需在所有平台上向您的应用授予一次同意权限。如需了解详情,请参阅官方 OAuth 2.0 政策。
完成 OAuth 应用验证
您的正式版应用必须经过验证,才能显示其名称和徽标。验证类型取决于您向用户请求的数据。
为帮助您规划发布时间表,Google 提供了不同验证类型的细分以及预期审核时间。如需详细了解验证政策,请参阅 OAuth 应用验证帮助中心。
安全性和令牌处理
本部分重点介绍开发者必须在其后端服务器上实现的运行时要求和安全措施。
将 Google ID 令牌与后端集成
- 验证 ID 令牌:始终在后端服务器上验证 Google ID 令牌的完整性。切勿仅因令牌是从客户端发送的就信任该令牌。建议您使用 Google API 客户端库进行此验证。如需了解详情,请参阅在服务器端验证 Google ID 令牌。
- 使用
sub声明:仅使用 Google ID 令牌sub字段作为用户的标识符,因为该字段在所有 Google 账号中都是唯一且稳定的,并且永远不会重复使用。您应存储sub字段,并将其与账号管理系统中的用户相关联。虽然您可以使用 ID 令牌中的电子邮件地址来检查用户是否已有账号,但请勿使用电子邮件地址作为标识符,因为一个 Google 账号在不同时间点可以有多个电子邮件地址。
在删除账号时撤消令牌
强烈建议为使用 Google 账号登录的用户提供将 Google 账号与您的应用断开连接的功能。如果用户选择删除其账号,您必须撤消您的应用已获取的所有访问令牌和刷新令牌。
如需详细了解客户端令牌撤消,请参阅 Web、Android、iOS 文档。如需了解服务器端撤消,请参阅针对网络服务器应用使用 OAuth 2.0。
将身份验证与授权分开
使用 Google 账号登录 SDK 仅请求身份验证所需的范围。如果您的应用需要访问其他 Google 服务(例如 Google 日历或云端硬盘),您应该单独请求这些权限,并且仅在用户尝试执行需要这些权限的操作时才请求。如需了解详情,请参阅分离的身份验证和授权时刻。
安全性方面的最佳实践
为了实现安全集成,请务必使用 Google API 客户端库在后端服务器上验证 ID 令牌。如需更全面地防范各种威胁,请实施安全套装和跨账号保护 (RISC)。此外,对于 iOS 应用,强烈建议集成 App Check 以确保请求来自您的正版应用。
用户体验 (UX)
本部分重点介绍如何优化面向用户的元素以及登录/注册流程。
醒目地显示按钮:“使用 Google 账号登录”按钮应在登录和注册页面上清晰可见且可供访问。
遵循品牌推广指南:使用官方 Google 品牌登录按钮,确保用户获得一致且值得信赖的体验。查看官方的“使用 Google 账号登录”品牌推广指南。
顺畅的注册体验:对于新用户,在他们首次成功完成“使用 Google 账号登录”流程后,自动创建账号或引导用户进入新账号创建流程。在后端,检查是否存在具有指定
subID 的用户;如果不存在,则创建一个新账号。这样可以最大限度地减少注册工作量。简化的登录流程:对于回访用户,使用
subID 来识别用户并验证其现有账号。实现自动登录(适用于 Web 和 Android)和 iOS 状态恢复等功能,以便用户快速安全地返回您的应用。管理社交账号登录方法:在用户设置中提供集中式的“关联账号”部分,用户可以在其中管理各种社交账号登录方法(例如 Google)。
关联:为使用其他方法(例如用户名和密码)的现有用户提供“使用 Google 账号登录”按钮。点击此按钮会启动身份验证流程,以将其 Google 账号与其现有个人资料相关联。
解除关联:提供用于解除账号关联的选项。为此,您必须撤消令牌并从数据库中移除 Google 关联。
Android 实现(应用和游戏)
标准 Android 应用
对于 Android 实现,您应使用 Credential Manager。这是处理用户凭据的推荐方法,可在 Android 上提供统一、安全且一致的登录体验。
使用 Android 的 OAuth 客户端 ID 进行实现。如果您已在其他平台(例如 Web、iOS)中实现“使用 Google 账号登录”,则应在同一 Google Cloud 项目中创建新的 Android 类型 OAuth 客户端 ID。
实现流程
稳健的实现应同时包含 Credential Manager 的底部操作表界面和“使用 Google 账号登录”按钮。
- 底部工作表:这是由开发者驱动的低摩擦提示,当用户进入您的登录界面时,Credential Manager 会显示此提示。
- “使用 Google 账号登录”按钮:这是用户可以点按以启动的显式用户启动的登录流程。
- 精确的 Google Cloud 云项目配置至关重要。这包括创建正确的 OAuth 客户端 ID 类型,并提供特定详细信息,例如应用的
SHA-1证书指纹。为确保设置正确,请严格按照官方 Android 开发者指南操作。
您应始终包含按钮流程,因为用户可能会关闭底部工作表,或者在偏好设置中停用底部工作表。该按钮可确保用户始终能够启动登录流程。
展示位置策略
“使用 Google 账号登录”按钮:
- 位置:在专用注册或登录页面上显示“使用 Google 账号登录”按钮。
- 曝光度:将其醒目地放置在其他登录方法旁边,例如用户名和密码字段或其他社交登录提供方。
Credential Manager Bottomsheet:
Android 游戏
对于 Android 游戏,不建议使用 Credential Manager。游戏开发者应改用 Google Play 游戏服务 (PGS) 方法,该方法侧重于使用“使用 Google 账号登录”功能实现跨平台 Google 身份验证。如需了解详情,请参阅使用 SiWG 实现跨平台连续性文档。
iOS 实现
使用官方的“使用 Google 账号登录”SDK
对于 iOS 应用,您应使用官方的 使用 Google 账号登录(适用于 iOS 和 macOS)SDK。此库提供了一种最安全且用户友好的方式来集成“使用 Google 账号登录”功能。
使用 iOS 的 OAuth 客户端 ID 进行实现。如果您已在其他平台(例如 Web、Android)中实现“使用 Google 账号登录”,则应在同一 Google Cloud 项目中创建新的 OAuth 客户端 ID(iOS 类型)。
添加“使用 Google 账号登录”按钮
- 放置位置:在应用的登录视图中添加“使用 Google 账号登录”按钮,同时在注册页面和登录页面上添加该按钮。将其醒目地放置在其他登录方法旁边,例如用户名和密码字段或其他社交登录提供商。
- 使用推荐的组件:使用 SDK 为 SwiftUI 和 UIKit 提供的官方按钮组件。这些组件会自动生成符合 Google 品牌推广指南的按钮,是显示按钮的推荐方式。
恢复用户登录状态
- 无缝返回:当您的应用启动时,请调用
restorePreviousSignIn以尝试恢复已使用 Google 进行身份验证的用户的登录状态。这样可确保回访用户不必每次打开您的应用时都登录,从而提供顺畅的体验,与其他平台上的自动登录功能相当。
使用 App Check 增强安全性
通过验证发送到 OAuth 2.0 客户端的请求是否来自您的正版应用,保护后端资源免遭滥用。App Check 使用证明提供方来验证请求是否来自真实且未被篡改的应用实例,并拒绝那些不符合要求的请求。如需了解详情,请参阅 iOS 版 Google 登录的 App Check。
Web 实现
适用于网站和 Web 应用的指南。
使用官方的“使用 Google 账号登录”JavaScript 库
对于 Web 实现,您应使用官方的 使用 Google 账号登录 JavaScript 库。这是最新一代的 Google 网页身份库,包含按钮和一键快捷功能功能。
使用 Web 的 OAuth 客户端 ID 进行实现。如果您已在其他平台(例如 Android、iOS)中实现“使用 Google 账号登录”,则应在同一 Google Cloud 项目中创建新的 OAuth 客户端 ID(Web 类型)。
实现“按钮”和“一键快捷功能”流程
最佳实践是同时实现“使用 Google 账号登录”按钮和一键登录体验。
- “使用 Google 账号登录”按钮:这是由用户明确发起的登录/注册流程。
- 一键快捷功能:提供顺畅无阻、干扰较少的登录或注册提示。
- 对于这两种实现,请为 Web 使用相同的 OAuth 客户端 ID。
您应始终将按钮作为主要登录选项。用户可以在 Google 账号设置中关闭或停用“一键快捷功能”,但该按钮始终可用,确保用户永远不会无法登录。
展示位置策略
“使用 Google 账号登录”按钮:
- 位置:在专用注册或登录页面上显示个性化的“使用 Google 账号登录”按钮。
- 曝光度:将其醒目地放置在其他登录方法旁边,例如用户名和密码字段或其他社交登录提供方。
- 查看:“使用 Google 账号登录”按钮注意事项部分,了解如何实现最佳配置和效果。
一键快捷功能提示:
- 位置:在网站的多个页面上显示“一键快捷功能”提示,例如各个商品页面、文章页面,甚至是首页。一键快捷功能的主要优势在于,用户无需离开当前页面即可登录或创建账号。
- 自动登录:对于回访用户,强烈建议在“一键快捷功能”中启用自动登录选项。这样一来,回访用户(之前已征得同意)无需任何互动即可重新登录您的应用。
- 查看:“一键快捷功能”注意事项部分,了解如何实现最佳配置和效果。