本指南介绍了如何通过 OAuth 2.0 使用用户的 Google 凭据访问 Chat API。使用用户凭据进行身份验证和授权后,聊天应用便可代表经过身份验证的用户访问用户数据并执行操作。应用代表用户进行身份验证,因此应用与该用户具有相同的权限,可以执行该用户的操作。不过,这些 Chat 应用无法公开发布。如需了解详情,请参阅发布 Google Chat 应用。
使用用户凭据对 API 调用进行身份验证和授权后,聊天应用可执行以下操作:
- 创建 Chat 聊天室。
- 将用户添加到 Chat 聊天室和群组对话。
- 使用其他 Workspace API 中的用户数据,例如:
当应用执行具有用户身份验证的操作(例如创建聊天室)时,Google Chat 会显示一条归因消息,其中会指明授权用户执行该操作的应用的名称。
如需详细了解 Chat 应用何时需要身份验证以及要使用的身份验证类型,请参阅 Chat API 身份验证和授权概览中的所需身份验证类型。
如果您是网域管理员,您可以授予全网域授权,以便授权应用的服务帐号访问您用户的数据,而无需每位用户表示同意。配置全网域授权后,服务帐号可能会模拟用户帐号。虽然服务帐号用于身份验证,但全网域授权机制会模拟用户,因此被视为用户身份验证。如果功能需要用户身份验证,您可以使用全网域授权功能。
如需使用 Google Chat API 访问或修改 Google Workspace 组织的资源,用户必须是该组织的成员。外部用户或没有 Google Workspace 帐号且可以使用 Google Chat 的用户不受支持。
前提条件
Python
- Python 3.6 或更高版本
- pip 软件包管理工具
- 有权访问 Google Chat 的 Google Workspace 帐号。
- 启用了并配置 Chat API 的 Google Cloud 项目。如需创建项目并启用 API,请参阅创建项目并启用 API。
- 在 Google Cloud 控制台中的 Chat API 配置页面上配置的 Chat 应用。如需创建和配置 Chat 应用,请参阅使用 Cloud Functions 构建 Google Chat 应用。
第 1 步:安装 Google 客户端库
如果您尚未安装所选语言的 Google 客户端库,请在命令行界面中运行以下命令:
Python
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client
您可以使用我们的客户端库支持的任何语言。
第 2 步:配置 OAuth 权限请求页面,指定范围,然后注册应用
当您使用 OAuth 2.0 进行授权时,Google 会向用户显示同意屏幕,包括项目摘要、其政策和所请求的授权范围。配置应用的 OAuth 权限请求页面会定义 Google 向用户显示和应用审核者的信息,并注册应用以便日后发布。
所有使用 OAuth 2.0 的应用都需要配置同意屏幕,但您只需为 Google Workspace 组织以外的人员列出的应用列出范围。
在 Google Cloud 控制台中,依次点击“菜单”图标 > API 和服务 > OAuth 同意屏幕。
选择应用的用户类型,然后点击 Create。
填写应用注册表单,然后点击保存并继续。
点击添加或移除范围。添加并验证应用所需的授权范围,然后依次点击更新和保存并继续。
查看您的应用注册摘要。点击修改进行更改,或点击返回信息中心。
第 3 步:在 Google Cloud 控制台中创建 OAuth 客户端 ID 凭据
如需作为最终用户进行身份验证并访问应用中的用户数据,您需要创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于向 Google 的 OAuth 服务器识别单个应用。如果您的应用在 Android、iOS 和 Web 等多个平台上运行,您需要为每个平台创建单独的客户端 ID。
创建 OAuth 客户端 ID 凭据
选择应用类型,详细了解如何创建 OAuth 客户端 ID:
Web 应用
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > Web 应用。
- 在名称字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 添加与您的应用相关的已获授权的 URI:
- 客户端应用 (JavaScript) - 在已获授权的 JavaScript 来源下,点击添加 URI。然后输入用于浏览器请求的 URI。用于标识您的应用可以从哪些网域向 OAuth 2.0 服务器发送 API 请求。
- 服务器端应用(Java、Python 等)- 在已获授权的重定向 URI 下,点击添加 URI。然后,输入 OAuth 2.0 服务器可向其发送响应的端点 URI。
- 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示您的新客户端 ID 和客户端密钥。
记下客户端 ID。Web 应用不使用客户端密钥。
- 点击 OK。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下方。
Android
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > Android。
- 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 在“软件包名称”字段中,输入
AndroidManifest.xml
文件中的软件包名称。 - 在“SHA-1 证书指纹”字段中,输入生成的 SHA-1 证书指纹。
- 点击创建。系统会显示 OAuth 客户端创建的屏幕,其中会显示您的新客户端 ID。
- 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。
iOS
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > iOS。
- 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 在“软件包 ID”字段中,输入应用的
Info.plist
文件中列出的软件包标识符。 - 可选:如果您的应用显示在 Apple App Store 中,请输入 App Store ID。
- 可选:在“Team ID”(团队 ID)字段中,输入由 Apple 生成并分配给您的团队的唯一 10 个字符的字符串。
- 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
- 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。
Chrome 应用
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > Chrome 应用。
- 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 在“应用 ID”字段中,输入应用的唯一 32 个字符的 ID 字符串。您可以在应用的 Chrome 应用商店网址和 Chrome 应用商店开发者信息中心内找到此 ID 值。
- 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
- 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。
桌面应用
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > 桌面应用。
- 在名称字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
- 点击 OK。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下方。
电视和受限输入设备
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > 电视和受限输入设备。
- 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
- 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。
通用 Windows 平台 (UWP)
- 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据。
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > 通用 Windows 平台 (UWP)。
- 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
- 在“商店 ID”字段中,输入应用的唯一 12 个字符的 Microsoft 商店 ID 值。您可以在应用的 Microsoft 商店网址和合作伙伴中心内找到此 ID。
- 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
- 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。
下载客户端密钥 JSON 文件
客户端密钥文件是 JSON 客户端 ID 的 OAuth 客户端 ID 凭据,在您的聊天应用中提供凭据时可引用。
在 Google Cloud 控制台中,点击“菜单”图标 > API 和服务 > 凭据。
在 OAuth 2.0 客户端 ID 下,点击您创建的客户端 ID。
点击下载 JSON。
将该文件另存为
client_secrets.json
。
第 4 步:编写会调用 Chat API 的脚本
以下代码使用客户端库调用 Chat API。它使用 OAuth 客户端 ID 凭据通过 Chat API 进行身份验证,然后创建一个聊天室。
将以下代码保存在名为 chat_space_create_named.py
的文件中,该文件所在的目录是 client_secrets.json
:
Python
from __future__ import print_function
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
# Define your app's authorization scopes.
# When modifying these scopes, delete the file token.json, if it exists.
SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"]
def main():
'''
Authenticates with Chat API via user credentials,
then creates a Chat space.
'''
flow = InstalledAppFlow.from_client_secrets_file(
'client_secrets.json', SCOPES)
creds = flow.run_local_server()
# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=creds)
# Use the service endpoint to call Chat API.
result = service.spaces().create(
# Details about the space to create.
body = {
# To create a named space, set spaceType to SPACE.
'spaceType': 'SPACE',
# The user-visible name of the space.
'displayName': 'API-made'
}
).execute()
# Prints details about the created membership.
print(result)
if __name__ == '__main__':
main()
第 5 步:运行示例脚本
如需运行该示例,请从命令行导航到包含 chat_space_create_named.py
和 client_secrets.json
的目录,然后执行以下命令:
Python
python3 chat_space_create_named.py
系统会打开一个浏览器,并提示您登录 Google 帐号:
当您登录后,系统会显示 OAuth 权限请求页面,并要求您向该应用授予权限。
授予权限后,脚本会调用 Chat API,API 通过将 Chat 应用添加到 Chat 聊天室来做出响应。控制台会输出 API 调用的详细信息。
排查示例问题
运行 chat_space_create_named.py
时,你可能会收到错误消息:
Expected a JSON object with a single property for a "web" or "installed" application
此错误消息意味着,您从 Google Cloud 控制台下载的 client_secrets.json
文件不以 "web"
或 "installed"
属性开头。使用下载的文件进行身份验证后,如果您的代码未将访问令牌保存在 token.json
等新文件中,则访问令牌会被写入 client_secrets.json
,这可能会导致后续授权尝试发生此错误。
如需解决此错误,请再次从 Google Cloud 控制台下载客户端密钥文件,然后将新文件保存到当前文件的位置。
相关主题
查看 Chat API 参考文档,了解 Chat API 还可以执行哪些其他操作。