使用 OAuth 进行身份验证的快速入门

借助 Gemini API,您可以对自己的数据执行语义检索。由于 您的数据,因此需要比 API 密钥更严格的访问权限控制。

本快速入门使用适合的简化身份验证方法 测试环境对于生产环境,请参阅 关于 身份验证和授权 早于 选择访问凭据 适合您应用的广告格式

目标

  • 针对 OAuth 设置您的云项目
  • 设置应用默认凭据
  • 在您的计划(而不是使用 gcloud auth)中管理凭据

前提条件

如需运行本快速入门,您需要:

设置您的云项目

如需完成本快速入门,您首先需要设置您的 Cloud 项目。

1. 启用 API

在使用 Google API 之前,您需要先在 Google Cloud 项目中启用这些 API。

  • 在 Google Cloud 控制台中,启用 Google Generative Language API。

    启用 API

2. 配置 OAuth 权限请求页面

接下来,配置项目的 OAuth 同意屏幕,并将您自己添加为测试 用户。如果您已经为自己的 Cloud 项目完成此步骤,请跳至 。

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

    前往 OAuth 权限请求页面

  2. 为您的应用选择外部用户类型,然后点击创建

  3. 填写应用注册表单(您可以将大部分字段留空), 然后点击保存并继续

  4. 现在,您可以跳过添加范围,然后点击保存并继续。在 创建可在 Google Workspace 以外的地方使用的应用 您必须添加并验证 应用所需的资源。

  5. 添加测试用户:

    1. 测试用户下,点击添加用户
    2. 输入您的电子邮件地址和任何其他已获授权的测试用户,然后 点击保存并继续
  6. 查看应用注册摘要。如需进行更改,请点击修改。如果 应用注册看起来没有问题,请点击 Back to Dashboard

3. 为桌面应用授权凭据

如需以最终用户身份进行身份验证并访问应用中的用户数据,您需要创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于标识 连接到 Google OAuth 服务器。如果您的应用在多个平台上运行 您必须为每个平台创建一个单独的客户端 ID。

  1. 在 Google Cloud 控制台中,依次点击菜单 >API 和服务 > 凭据

    前往“凭据”页面

  2. 点击创建凭据 >OAuth 客户端 ID

  3. 点击应用类型 >桌面应用

  4. 名称字段中,输入凭据的名称。只有 显示在 Google Cloud 控制台中。

  5. 点击创建。此时会显示“已创建 OAuth 客户端”屏幕,其中会显示您的新 客户端 ID 和客户端密钥。

  6. 点击 OK。新创建的凭据会显示在 OAuth 2.0 Client 。

  7. 点击下载按钮以保存 JSON 文件。它将另存为 client_secret_<identifier>.json,然后将其重命名为 client_secret.json 并将其移动到您的工作目录。

设置应用默认凭据

如需将 client_secret.json 文件转换为可用的凭据,请将该文件的 gcloud auth application-default login 命令的 --client-id-file 参数。

gcloud auth application-default login \
    --client-id-file=client_secret.json \
    --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.retriever'

本教程中简化的项目设置会触发“Google 尚未 确认了此应用。”对话框。这是正常现象,请选择“continue”。

这会将生成的令牌放置在一个已知位置,以便可以访问该令牌 由 gcloud 或客户端库提供。

gcloud auth application-default login 
--no-browser --client-id-file=client_secret.json
--scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.retriever'

设置应用默认凭据 (ACD) 后,客户端 大多数语言版本的库只需要少量帮助或不需要帮助就能找到它们。

Curl

测试它是否有效的最快方法是使用它访问 REST 使用 curl 访问 API:

access_token=$(gcloud auth application-default print-access-token)
project_id=<MY PROJECT ID>
curl -X GET https://generativelanguage.googleapis.com/v1/models \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" | grep '"name"'

Python

在 Python 中,客户端库应该会自动找到它们:

pip install google-generativeai

用于测试它的最小脚本可能是:

import google.generativeai as genai

print('Available base models:', [m.name for m in genai.list_models()])

后续步骤

如果这样做有效,你可以尝试 对文本数据进行语义检索

自行管理凭据 [Python]

在许多情况下,您无法使用 gcloud 命令来创建访问权限 从客户端 ID (client_secret.json) 检索令牌。Google 提供 以便您可以在应用内管理该流程此部分 并用 Python 代码演示该过程我们还提供了此类等效示例 其他编程语言,详见 Drive API 文档

1. 安装必要的库

安装 Python 版 Google 客户端库和 Gemini 客户端库。

pip install --upgrade -q google-api-python-client google-auth-httplib2 google-auth-oauthlib
pip install google-generativeai

2. 编写 Credential Manager

尽可能减少必须点击访问授权的次数 在您的工作目录中创建一个名为 load_creds.py 的文件, 缓存 token.json 文件以供日后重复使用,或者在过期后刷新。

从 以下代码将 client_secret.json 文件转换为可使用 genai.configure:

import os.path

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow

SCOPES = ['https://www.googleapis.com/auth/generative-language.retriever']

def load_creds():
    """Converts `client_secret.json` to a credential object.

    This function caches the generated tokens to minimize the use of the
    consent screen.
    """
    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'client_secret.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())
    return creds

3. 编写程序

现在,创建您的 script.py

import pprint
import google.generativeai as genai
from load_creds import load_creds

creds = load_creds()

genai.configure(credentials=creds)

print()
print('Available base models:', [m.name for m in genai.list_models()])

4. 运行程序

在您的工作目录中,运行该示例:

python script.py

首次运行该脚本时,系统会打开一个浏览器窗口并提示您 以授予访问权限。

  1. 如果您尚未登录 Google 账号,系统会提示您 登录。如果您登录了多个账号,请务必选择 您设置为“测试账号”的账号需要注意的事项

  2. 授权信息存储在文件系统中,所以下次您 运行示例代码,系统不会提示您授权。

您已成功设置身份验证。