Web 应用程序必须获取访问令牌才能安全地调用 Google API。
Google 身份服务 JavaScript 库支持用户登录身份验证和授权以获取与 Google API 一起使用的访问令牌。该库仅用于浏览器。
身份验证确定某人是谁,通常称为用户注册或登录。授权是授予或拒绝访问数据或资源的过程。它包括获取和管理用户同意、限制与范围共享的数据或资源的数量,以及检索访问令牌以与 Google API 一起使用。
这些指南涵盖授权和数据共享主题。
用户授权的工作原理详细描述了用户授权的各个步骤,并包括用户对话示例。
如果您正在寻求有关身份验证以及如何实现用户注册和登录的帮助,请参阅使用 Google 登录。
此库不适用于 Node.js 等服务器端 JavaScript 框架,而是使用 Google 的Node.js客户端库。
发生了什么变化
对于用户而言,Google 身份服务库提供了比早期 JavaScript 库更多的可用性改进,包括:
- 用户登录身份验证和获取访问令牌以调用 Google API 的授权现在有两个独立且不同的用户流程;一个用于登录,另一个用于授权期间的同意,使用单独的用户流程来清楚地区分您是谁,以及应用程序可以做什么。
- 在用户同意期间改进了数据共享的可见性和精细控制。
- 基于浏览器的弹出对话框可减少摩擦,并且不需要用户离开您的网站即可:
- 从 Google 获取访问令牌,或
- 将授权码发送到您的后端平台。
对于开发人员,我们的重点是降低复杂性、提高安全性,并使您的集成尽可能快速和简单。其中一些变化是:
- 用于登录的用户身份验证和用于获取访问令牌以调用 Google API 的授权是两组独立且不同的 JavaScript 对象和方法。这降低了实现身份验证或授权所需的复杂性和详细信息量。
- 一个 JavaScript 库现在同时支持:
- OAuth 2.0 隐式流,用于获取访问令牌以在浏览器中使用
- OAuth 2.0 授权代码流,也称为离线访问,并开始将授权代码安全地传送到您的后端平台,在那里可以交换访问令牌和刷新令牌。以前,这些流程只能通过使用多个库和直接调用 OAuth 2.0 端点来获得。一个库可以减少您的集成时间和工作量,而不是包含和学习多个库和 OAuth 2.0 概念,您可以专注于一个统一的界面。
- 为了简单和可读性,通过 getter 样式函数的间接性已被删除。
- 在处理授权响应时,您选择是否使用Promise来完成请求,而不是为您做出决定。
- 适用于 JavaScript 的 Google API 客户端库已通过以下更改进行了更新:
-
gapi.auth2
模块和关联的对象和方法不再在幕后自动为您加载,而是被更明确的 Google 身份服务库对象和方法所取代。 - 已删除过期访问令牌的自动刷新,以提高用户安全性和意识。访问令牌过期后,您的应用必须处理 Google API 错误响应、请求并获取新的有效访问令牌。
- 为了支持身份验证和授权时刻的明确分离,不再支持同时将用户登录到您的应用程序和他们的 Google 帐户,同时还发布访问令牌。以前,请求访问令牌还会将用户登录到他们的 Google 帐户并返回 JWT ID 令牌凭据以进行用户身份验证。
-
- 为了提高用户的安全性和隐私性,为授权发布的每个用户凭据遵循最小权限原则,仅包含访问令牌和管理它所需的信息。