身份验证和授权是分别用于验证身份和资源访问权限的机制。本文档简要介绍了 Chat 应用和 Chat API 请求的身份验证和授权机制。
流程概览
下图展示了 Google Chat 的身份验证和授权的大致步骤:
配置 Google Cloud 项目、启用 Chat API 并配置 Chat 应用:在开发期间,您需要创建一个 Google Cloud 项目。在 Google Cloud 项目中,您需要启用 Chat API、配置 Chat 应用并设置身份验证。如需了解详情,请参阅在 Google Workspace 上开发和构建 Chat 应用。
调用 Chat API:当您的应用调用 Chat API 时,它会向 Chat API 发送身份验证凭证。如果您的应用使用服务账号进行身份验证,则凭据会作为应用代码的一部分发送。如果您的应用需要使用尚未获得授权的用户身份验证来调用 Chat API,则会提示用户登录。
请求资源:您的应用会使用您在设置身份验证时指定的范围请求访问权限。
征求同意:如果您的应用以用户身份进行身份验证,Google 会显示 OAuth 权限请求页面,以便用户决定是否授予您的应用对所请求数据的访问权限。使用服务账号进行身份验证不需要用户同意。
发送已获批准的资源请求:如果用户同意授权范围,您的应用会将凭证和用户批准的范围打包到请求中。该请求会发送到 Google 授权服务器,以获取访问令牌。
Google 返回访问令牌:访问令牌包含已授予的范围列表。如果返回的范围列表比请求的范围更严格,您的应用会关闭受令牌限制的所有功能。
访问请求的资源:您的应用使用 Google 提供的访问令牌调用 Chat API 并访问 Chat API 资源。
获取刷新令牌(可选):如果您的应用必须在单个访问令牌的生命周期之外访问 Google Chat API,则可以获取刷新令牌。如需了解详情,请参阅使用 OAuth 2.0 访问 Google API。
请求更多资源:如果您的应用需要更多访问权限,它会要求用户授予新的范围,从而产生获取访问令牌的新请求(第 3-6 步)。
Chat 应用何时需要身份验证
Chat 应用可以发送消息来响应用户互动,也可以异步发送消息。它们还可以代表用户完成任务,例如创建 Chat 聊天室或获取 Chat 聊天室中的人员列表。
Chat 应用无需进行身份验证即可响应用户互动,除非 Chat 应用在处理响应时调用 Chat API 或其他 Google API。
如需代表用户发送异步消息或执行任务,Chat 应用会向 Chat API 发出 RESTful 请求,这需要进行身份验证和授权。
对用户互动的响应不需要身份验证
Google Chat 应用无需以用户或 Chat 应用的身份进行身份验证,即可接收用户互动并同步响应。
每当用户与 Chat 应用互动或调用 Chat 应用时,Google Chat 应用都会收到事件对象,包括:
- 用户向 Chat 应用发送消息。
- 用户 @提及 Chat 应用。
- 用户调用 Chat 应用的某个命令。
下图展示了 Chat 用户与 Chat 应用之间的请求-响应序列:
- 用户在 Google Chat 中向 Chat 应用发送消息。
- Google Chat 会将消息转发给应用。
- 应用收到消息后,会对其进行处理,然后向 Google Chat 返回响应。
- Google Chat 会为用户或在聊天室中呈现回答。
此序列会针对每个 Chat 应用用户互动重复。
异步消息需要身份验证
当 Chat 应用向 Chat API 发出请求时,会发生异步消息,这需要进行身份验证和授权。
通过调用 Chat API,Chat 应用可以向 Google Chat 发布消息,或代表用户完成任务和访问数据。例如,在检测到服务器服务中断后,Chat 应用可以调用 Chat API 来执行以下操作:
- 创建一个专门用于调查和修复服务中断问题的 Chat 聊天室。
- 向 Chat 聊天室添加成员。
- 向 Chat 聊天室发布消息,提供有关服务中断的详细信息。
下图展示了 Chat 应用与 Chat 聊天室之间的异步消息序列:
- Chat 应用通过使用
spaces.messages.create方法调用 Chat API 来创建消息,并在 HTTP 请求中包含用户凭据。 - Google Chat 使用服务账号或用户凭证对 Chat 应用进行身份验证。
- Google Chat 会将应用的消息呈现到指定的 Chat 聊天室。
Chat API 范围
配置 OAuth 权限请求页面并选择范围,以定义向用户和应用审核者显示哪些信息,并注册应用以便日后发布。
如需定义授予应用的访问权限级别,您需要确定并声明授权范围。授权范围是一个 OAuth 2.0 URI 字符串,其中包含 Google Workspace 应用名称、其访问的数据类型以及访问权限级别。
非敏感范围
| 范围代码 | 说明 |
|---|---|
https://www.googleapis.com/auth/chat.bot
|
允许 Chat 应用查看对话和发送消息。 |
敏感范围
| 范围代码 | 说明 |
|---|---|
https://www.googleapis.com/auth/chat.spaces
|
在 Chat 中创建对话和聊天室,以及查看或修改元数据(包括聊天记录设置和访问权限设置)。 |
https://www.googleapis.com/auth/chat.spaces.create
|
在 Chat 中创建新对话。 |
https://www.googleapis.com/auth/chat.spaces.readonly
|
在 Chat 中查看聊天和聊天室元数据。 |
https://www.googleapis.com/auth/chat.memberships
|
查看、添加、更新和移除 Chat 对话中的成员。 |
https://www.googleapis.com/auth/chat.memberships.app
|
在 Google Chat 对话中添加和移除自己。 |
https://www.googleapis.com/auth/chat.memberships.readonly
|
查看 Chat 对话中的成员。 |
https://www.googleapis.com/auth/chat.messages.create
|
在 Chat 中撰写和发送消息。 |
https://www.googleapis.com/auth/chat.messages.reactions
|
在 Chat 中查看、添加和删除对消息的回应。 |
https://www.googleapis.com/auth/chat.messages.reactions.create
|
在 Chat 中对消息添加回应。 |
https://www.googleapis.com/auth/chat.messages.reactions.readonly
|
在 Chat 中查看对消息的回应。 |
https://www.googleapis.com/auth/chat.users.readstate
|
查看和修改 Chat 对话的上次读取时间。 |
https://www.googleapis.com/auth/chat.users.readstate.readonly
|
查看 Chat 对话的上次读取时间。 |
https://www.googleapis.com/auth/chat.admin.spaces.readonly
|
在 Chat 中查看管理员网域拥有的聊天和聊天室。 |
https://www.googleapis.com/auth/chat.admin.spaces
|
查看或修改 Chat 中归管理员网域所有的聊天和聊天室。 |
https://www.googleapis.com/auth/chat.admin.memberships.readonly
|
查看 Chat 中管理员网域拥有的对话中的成员和管理员。 |
https://www.googleapis.com/auth/chat.admin.memberships
|
查看、添加、更新和移除 Chat 中管理员网域拥有的对话中的成员和管理员。 |
https://www.googleapis.com/auth/chat.app.spaces
|
以 Chat 应用身份在 Chat 中创建对话和聊天室,以及查看或更新元数据(包括聊天记录设置和访问权限设置)。需要管理员批准。 |
https://www.googleapis.com/auth/chat.app.spaces.readonly
|
以 Chat 应用身份查看 Chat 中的元数据(包括聊天记录设置)。需要管理员批准。 |
https://www.googleapis.com/auth/chat.app.spaces.create
|
以 Chat 应用身份在 Chat 中创建新对话和聊天室。需要管理员批准。 |
https://www.googleapis.com/auth/chat.app.memberships
|
以 Chat 应用身份查看、添加、更新和移除 Chat 对话和聊天室中的成员。需要管理员批准。 |
https://www.googleapis.com/auth/chat.app.memberships.readonly
|
以 Chat 应用身份查看 Chat 对话和聊天室中的成员。需要管理员批准。 |
https://www.googleapis.com/auth/chat.customemojis
|
在 Chat 中查看、创建和删除自定义表情符号。 |
https://www.googleapis.com/auth/chat.customemojis.readonly
|
在 Chat 中查看自定义表情符号。 |
https://www.googleapis.com/auth/chat.users.spacesettings
|
查看和更新 Chat 用户聊天室设置。 |
https://www.googleapis.com/auth/chat.users.sections
|
在 Chat 中查看、创建、更新和删除版块;在 Chat 中移动和列出版块项。 |
https://www.googleapis.com/auth/chat.users.sections.readonly
|
在 Chat 中查看您的版块及相应版块项。 |
受限范围
| 范围代码 | 说明 |
|---|---|
https://www.googleapis.com/auth/chat.delete
|
删除 Google Chat 中的对话和聊天室,并撤消对其中所关联文件的访问权限。 |
https://www.googleapis.com/auth/chat.import
|
将聊天室、消息和成员资格导入到 Chat。如需了解详情,请参阅授权 Chat 应用导入数据 |
https://www.googleapis.com/auth/chat.messages
|
查看、撰写、发送、更新和删除消息,以及添加、查看和删除对消息的回应。 |
https://www.googleapis.com/auth/chat.messages.readonly
|
在 Chat 中查看消息和回应。 |
https://www.googleapis.com/auth/chat.app.messages.readonly
|
以 Chat 应用的身份在 Chat 中查看消息和回应。 需要管理员批准。 |
https://www.googleapis.com/auth/chat.admin.delete
|
删除管理员网域拥有的对话和聊天室,并撤消对 Chat 中关联文件的访问权限。 |
https://www.googleapis.com/auth/chat.app.delete
|
以 Chat 应用的身份删除 Chat 中的对话和聊天室,并撤消对其中所关联文件的访问权限。需要管理员批准。 |
上表中的范围根据以下定义指明其敏感度:
非敏感 - 这些范围提供最小的授权访问权限范围,并且只需要基本应用验证。如需了解此要求,请参阅验证准备步骤。
敏感 - 这些范围可让您的应用在获得用户授权后访问特定用户的 Google 数据。您需要完成额外的应用验证。如需了解此要求,请参阅针对请求敏感范围的应用的步骤。
受限 - 这些范围提供对 Google 用户数据的广泛访问权限,并且需要您完成受限范围验证流程。如需了解此要求,请参阅 Google API 服务:用户数据政策和针对特定 API 范围的其他要求。另请参阅请求受限范围的应用的步骤。
如果您的应用需要访问任何其他 Google API,您也可以添加这些范围。如需详细了解 Google API 范围,请参阅使用 OAuth 2.0 访问 Google API。
如需详细了解 Google Workspace API 的范围,请参阅配置 OAuth 权限请求页面并选择范围。
所需的身份验证类型
Chat 应用可以通过两种方式向 Chat API 进行身份验证和授权:
- 用户身份验证
- 用户身份验证可让 Chat 应用访问用户数据并代表用户完成操作。OAuth 范围指定了授权的数据和操作。 除非 Chat 应用是由管理员安装或获得了全网域授权,否则当 Chat 应用首次代表用户执行操作时,用户必须使用 OAuth 权限请求页面向 Chat 应用授权。
- 应用身份验证
应用身份验证可让 Chat 应用使用服务账号凭证,并以自身身份访问数据和完成操作。由于 Chat 应用使用自己的凭据来访问和处理资源,因此最终用户无需批准 Chat 应用的 API 调用,并且您无法将支持应用授权的 OAuth 授权范围添加到 OAuth 权限请求页面。
有两种类型的 OAuth 授权范围支持应用身份验证:
https://www.googleapis.com/auth/chat.bot:您的 Chat 应用可以调用支持此授权范围的 Google Chat API 方法,以创建、更新、获取、列出或删除其有权访问的资源,例如最终用户将您的 Chat 应用添加到的聊天室中的消息。您的 Chat 应用可以自行授予此授权范围,无需管理员或最终用户授权。https://www.googleapis.com/auth/chat.app.*:使用这些范围需要获得管理员的一次性批准。如需获得管理员批准,您需要通过创建与 Google Workspace Marketplace 兼容的 OAuth 客户端并在 Google Workspace Marketplace SDK 中配置应用,准备好 Chat 应用的服务账号以获得管理员批准。这些范围允许您的 Chat 应用调用特定的 Google Chat API 方法。例如,chat.app.spaces.create允许应用创建 Chat 聊天室。
如果某个方法同时支持用户身份验证和应用身份验证,Chat API 会根据您使用的身份验证类型返回不同的结果:
- 使用应用身份验证时,这些方法仅返回 Chat 应用可以访问的资源。
- 使用用户身份验证时,这些方法仅返回用户可以访问的资源。
例如,通过应用授权调用 spaces.list() 方法会返回 Chat 应用所属的聊天室列表。使用用户授权调用 spaces.list() 会返回用户所属的空间列表。在实践中,您在调用 Chat API 时可能会同时使用这两种类型的身份验证,具体取决于 Chat 应用的设计和功能。
对于异步 Chat API 调用
下表列出了 Chat API 方法及其支持的授权范围:
| 方法 | 支持用户身份验证 | 支持应用身份验证 | 支持的授权范围 | |
|---|---|---|---|---|
| Spaces | ||||
| 创建聊天室 |
使用用户身份验证:
|
|||
| 设置空间 | — |
使用用户身份验证:
|
||
| 获取聊天室 |
使用用户身份验证:
|
|||
| 列出空间 |
使用用户身份验证:
|
|||
| 搜索空间 | — |
使用管理员权限进行用户身份验证:
|
||
| 更新空间 |
使用用户身份验证:
|
|||
| 删除聊天室 |
使用用户身份验证:
|
|||
| 完成聊天室的导入流程 | — |
使用用户身份验证:
|
||
| 查找私信 |
使用用户身份验证:
|
|||
| 成员 | ||||
| 创建成员 |
使用用户身份验证:
|
|||
| 获取成员 |
使用用户身份验证:
|
|||
| 列出成员 |
使用用户身份验证:
|
|||
| 删除成员 |
使用用户身份验证:
|
|||
| 更新成员 |
使用用户身份验证:
|
|||
| 信息 | ||||
| 创建消息 |
使用用户身份验证:
|
|||
| 获取消息 |
使用用户身份验证:
|
|||
| 列出消息 |
使用用户身份验证:
|
|||
| 搜索消息 | — |
使用用户身份验证:
|
||
| 更新消息 |
使用用户身份验证:
|
|||
| 删除消息 |
使用用户身份验证:
|
|||
| 置顶消息 | — |
使用用户身份验证:
|
||
| 取消置顶消息 | — |
使用用户身份验证:
|
||
| 列出已固定的消息 | — |
使用用户身份验证:
|
||
| 更新消息中的卡片 | — |
使用应用身份验证:
|
||
| 回应 | ||||
| 创建回应 | — |
使用用户身份验证:
|
||
| 列出回应 | — |
使用用户身份验证:
|
||
| 删除回应 | — |
使用用户身份验证:
|
||
| 自定义表情符号 | ||||
| 创建自定义表情符号 | — |
使用用户身份验证:
|
||
| 删除自定义表情符号 | — |
使用用户身份验证:
|
||
| 获取自定义表情符号 | — |
使用用户身份验证:
|
||
| 列出自定义表情符号 | — |
使用用户身份验证:
|
||
| 媒体和附件 | ||||
| 以文件附件形式上传媒体 | — |
使用用户身份验证:
|
||
| 下载媒体内容 |
使用用户身份验证:
|
|||
| 获取邮件附件 | — |
使用应用身份验证:
|
||
| 用户已读状态 | ||||
| 获取用户的聊天室已读状态 | — |
使用用户身份验证:
|
||
| 更新用户的聊天室已读状态 | — |
使用用户身份验证:
|
||
| 获取用户的会话已读状态 | — |
使用用户身份验证:
|
||
| 用户空间设置 | ||||
| 获取用户的聊天室通知设置 | — |
使用用户身份验证:
|
||
| 更新用户的聊天室通知设置 | — |
使用用户身份验证:
|
||
| 空间事件 | ||||
| 获取空间事件 | — |
对于用户身份验证,您必须根据
事件类型使用范围:
|
||
| 列出聊天室事件 | — |
使用用户身份验证时,您必须为请求中包含的每种
事件类型使用一个范围:
|
||
| 版块 | ||||
| 创建版块 | — |
使用用户身份验证:
|
||
| 删除章节 | — |
使用用户身份验证:
|
||
| 列表部分 | — |
使用用户身份验证:
|
||
| 更新版块 | — |
使用用户身份验证:
|
||
| 定位版块 | — |
使用用户身份验证:
|
||
| 版块内容 | ||||
| 移动版块内容 | — |
使用用户身份验证:
|
||
| 列出部分内容 | — |
使用用户身份验证:
|
||
对于 Chat 应用互动事件
下表列出了用户与 Chat 应用互动的常见方式,以及是否需要或支持身份验证:
| 场景 | 无需身份验证 | 支持用户身份验证 | 支持应用身份验证 | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 接收来自以下对象的消息: |
|
|||||||||||||||
| 回复消息: |
|
|||||||||||||||
| 发送新消息: |
|
|||||||||||||||
相关主题
- 如需大致了解 Google Workspace 中的身份验证和授权,请参阅了解身份验证和授权。
- 如需大致了解 Google Cloud 中的身份验证和授权,请参阅身份验证概览。
- 如需详细了解服务账号,请参阅服务账号。
- 如需详细了解 Google API 如何使用 OAuth 2.0,请参阅使用 OAuth 2.0 访问 Google API。
- 使用用户凭证或服务账号设置身份验证和授权。
- 如需管理 OAuth 精细权限,请参阅管理 Google Chat 应用的 OAuth 精细权限。