本指南可帮助您选择是使用 Google Identity 服务库进行用户授权,还是使用 Google Identity 服务库实现您自己的 JavaScript 库。它可以帮助您确定哪种 OAuth 2.0 授权流程最适合您的 Web 应用。
在阅读本指南之前,假设您已熟悉概览和用户授权的工作原理指南中所述的术语和概念。
GIS 库可在用户设备上的这些受支持的浏览器中运行。它不适合与服务器端 JavaScript 框架(如 Node.js)配合使用,请改用 Google 的 Node.js 客户端库。
本指南仅涵盖授权和数据共享主题。该 API 不审核用户身份验证,而是参阅使用 Google 帐号登录和从 Google 登录功能迁移指南中有关用户注册和登录的部分。
确定 GIS 库是否适合您
您必须选择是使用 Google 的库,还是根据自己的需求创建自己的库。特性和功能概述:
- Google 的身份服务 JavaScript 库会实现:
- 基于弹出式窗口的意见征求流程可最大限度地减少重定向,从而让用户能够在整个授权流程中停留在您的网站上。
- 安全功能,例如跨站请求伪造 (CRSF)。
- 用于请求各个作用域并确认用户同意的辅助方法。
- 人性化的错误处理和文档链接,供工程师在开发期间及之后供网站访问者使用。
- 在不使用 Identity Services 库的情况下实现时,您需负责:
- 使用 Google 的 OAuth 2.0 端点管理请求和响应,包括重定向。
- 优化用户体验。
- 实现安全功能,以验证请求、响应并防止 CSRF。
- 用于确认用户是否同意请求的所有范围的方法。
- 管理 OAuth 2.0 错误代码、创建直观易懂的消息以及指向用户帮助的链接。
总而言之,Google 提供的 GIS 库可帮助您快速、安全地实现 OAuth 2.0 客户端,并优化用户的授权体验。
选择授权流程
无论您是决定使用 Google Identity 服务 JavaScript 库还是创建自己的库,都需要从两种 OAuth 2.0 授权流程中选择一个:隐式或授权代码。
这两个流程都会生成可用于调用 Google API 的访问令牌。
两个流程之间的主要区别如下:
- 用户操作的数量
- 您的应用是否会在用户不在场的情况下调用 Google API;
- 如果需要后端平台来托管端点并为各个用户帐号存储每位用户的刷新令牌,以及
- 降低用户安全性
在比较流程和评估安全要求时,需要考虑的一个因素是用户安全级别因您选择的范围而异。例如,与使用读/写范围修改云端硬盘中的文件相比,以只读方式查看日历邀请的风险可能较低。
OAuth 2.0 流程比较
隐式流 | 授权代码流程 | |
需要征得用户同意 | 针对每个令牌请求(包括替换过期令牌)。 | 仅适用于第一个令牌请求。 |
用户必须存在 | 是 | 否,支持离线使用。 |
用户安全 | 最少 | 大多数支持客户端身份验证,并且可以避免浏览器内令牌处理风险。 |
已颁发访问令牌 | 是 | 是 |
发放刷新令牌 | 否 | 是 |
需要支持的浏览器 | 是 | 是 |
用于调用 Google API 的访问令牌 | 来自用户浏览器中运行的 Web 应用。 | 要么来自在后端平台上运行的服务器,要么来自用户浏览器中运行的 Web 应用。 |
需要后端平台 | 否 | 是,对于端点托管和存储。 |
需要安全的存储空间 | 否 | 是,对于刷新令牌存储。 |
需要托管授权代码端点 | 否 | 是,从 Google 接收授权代码。 |
访问令牌到期行为 | 需要用户手势(例如按下按钮或点击链接)才能请求并获取有效的新访问令牌。 | 初始用户请求后,您的平台会交换存储的刷新令牌,以获取调用 Google API 所需的新访问令牌。 |