对用户进行身份验证和授权

本指南介绍了如何通过 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

第 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 组织以外的人员列出的应用列出范围。

  1. 在 Google Cloud 控制台中,依次点击“菜单”图标 > API 和服务 > OAuth 同意屏幕

    转到 OAuth 同意屏幕

  2. 选择应用的用户类型,然后点击 Create

  3. 填写应用注册表单,然后点击保存并继续

  4. 点击添加或移除范围。添加并验证应用所需的授权范围,然后依次点击更新保存并继续

  5. 查看您的应用注册摘要。点击修改进行更改,或点击返回信息中心

第 3 步:在 Google Cloud 控制台中创建 OAuth 客户端 ID 凭据

如需作为最终用户进行身份验证并访问应用中的用户数据,您需要创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于向 Google 的 OAuth 服务器识别单个应用。如果您的应用在 Android、iOS 和 Web 等多个平台上运行,您需要为每个平台创建单独的客户端 ID。

创建 OAuth 客户端 ID 凭据

选择应用类型,详细了解如何创建 OAuth 客户端 ID:

Web 应用

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > Web 应用
  4. 名称字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 添加与您的应用相关的已获授权的 URI:
    • 客户端应用 (JavaScript) - 在已获授权的 JavaScript 来源下,点击添加 URI。然后输入用于浏览器请求的 URI。用于标识您的应用可以从哪些网域向 OAuth 2.0 服务器发送 API 请求。
    • 服务器端应用(Java、Python 等)- 在已获授权的重定向 URI 下,点击添加 URI。然后,输入 OAuth 2.0 服务器可向其发送响应的端点 URI。
  6. 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示您的新客户端 ID 和客户端密钥。

    记下客户端 ID。Web 应用不使用客户端密钥。

  7. 点击 OK。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下方。

Android

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > Android
  4. 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 在“软件包名称”字段中,输入 AndroidManifest.xml 文件中的软件包名称。
  6. 在“SHA-1 证书指纹”字段中,输入生成的 SHA-1 证书指纹
  7. 点击创建。系统会显示 OAuth 客户端创建的屏幕,其中会显示您的新客户端 ID。
  8. 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。

iOS

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > iOS
  4. 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 在“软件包 ID”字段中,输入应用的 Info.plist 文件中列出的软件包标识符。
  6. 可选:如果您的应用显示在 Apple App Store 中,请输入 App Store ID。
  7. 可选:在“Team ID”(团队 ID)字段中,输入由 Apple 生成并分配给您的团队的唯一 10 个字符的字符串。
  8. 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
  9. 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。

Chrome 应用

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > Chrome 应用
  4. 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 在“应用 ID”字段中,输入应用的唯一 32 个字符的 ID 字符串。您可以在应用的 Chrome 应用商店网址和 Chrome 应用商店开发者信息中心内找到此 ID 值。
  6. 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
  7. 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。

桌面应用

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > 桌面应用
  4. 名称字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
  6. 点击 OK。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下方。

电视和受限输入设备

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > 电视和受限输入设备
  4. 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
  6. 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。

通用 Windows 平台 (UWP)

  1. 在 Google Cloud 控制台中,依次转到“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > 通用 Windows 平台 (UWP)
  4. 在“名称”字段中,输入凭据名称。此名称仅在 Google Cloud Console 中显示。
  5. 在“商店 ID”字段中,输入应用的唯一 12 个字符的 Microsoft 商店 ID 值。您可以在应用的 Microsoft 商店网址和合作伙伴中心内找到此 ID。
  6. 点击创建。系统随即会显示 OAuth 客户端创建的屏幕,其中会显示新的客户端 ID 和客户端密钥。
  7. 点击 OK。新创建的凭据会显示在“OAuth 2.0 Client ID”下。

下载客户端密钥 JSON 文件

客户端密钥文件是 JSON 客户端 ID 的 OAuth 客户端 ID 凭据,在您的聊天应用中提供凭据时可引用。

  1. 在 Google Cloud 控制台中,点击“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. OAuth 2.0 客户端 ID 下,点击您创建的客户端 ID。

  3. 点击下载 JSON

  4. 将该文件另存为 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.pyclient_secrets.json 的目录,然后执行以下命令:

Python

python3 chat_space_create_named.py

系统会打开一个浏览器,并提示您登录 Google 帐号:

登录即可向 Chat 应用授权。

图 1. OAuth 权限请求页面,您可以选择用于对应用进行身份验证的帐号。

当您登录后,系统会显示 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 还可以执行哪些其他操作。