对 Gemini API 进行身份验证的最简单方法是配置 API 密钥,如 Gemini API 快速入门 指南中所述。如果您需要更严格的访问权限控制,则可以改用 OAuth。本指南将帮助您使用 OAuth 设置身份验证。
本指南使用一种简化的身份验证方法,适用于测试环境。对于生产环境,请先了解 关于 身份验证和授权 然后 选择访问凭据 适合您的应用。
目标
- 为 OAuth 设置云项目
- 设置应用默认凭据
- 在程序中管理凭据,而不是使用
gcloud auth
前提条件
如需运行此快速入门,您需要:
设置 Cloud 项目
如需完成此快速入门,您首先需要设置 Cloud 项目。
1. 启用 API
在使用 Google API 之前,您需要在 Google Cloud 项目中启用它们。
在 Google Cloud 控制台中,启用 Google Generative Language API。
2. 配置 OAuth 权限请求页面
接下来,配置项目的 OAuth 权限请求页面,并将自己添加为测试用户。如果您已为 Cloud 项目完成此步骤,请跳到下一部分。
在 Google Cloud 控制台中,依次前往菜单 > Google Auth 平台 > 概览 。
填写项目配置表单,并在受众群体 部分中将用户类型设置为外部 。
填写表单的其余部分,接受《用户数据政策》条款,然后点击创建 。
目前,您可以跳过添加范围,然后点击保存并继续 。日后,当您创建要在 Google Workspace 组织外部使用的应用时,必须添加并验证应用所需的授权范围。
添加测试用户:
- 前往 Google Auth 平台的 “受众群体”页面。
- 在测试用户 下,点击添加用户 。
- 输入您的电子邮件地址和任何其他已获授权的测试用户,然后点击保存 。
3. 为桌面应用授权凭据
如需以最终用户身份进行身份验证并访问应用中的用户数据,您需要创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于向 Google 的 OAuth 服务器标识单个应用。如果您的应用在多个平台上运行,则必须为每个平台创建一个单独的客户端 ID。
在 Google Cloud 控制台中,依次前往菜单 > Google Auth 平台 > 客户端 。
点击创建客户端 。
依次点击应用类型 > 桌面应用 。
在名称 字段中,输入凭据的名称。此名称仅在 Google Cloud 控制台中显示。
点击创建 。此时会显示“OAuth 客户端已创建”屏幕,其中显示您的新客户端 ID 和客户端密钥。
点击确定 。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下。
点击下载按钮以保存 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 尚未 验证此应用。" 对话框。这是正常现象,请选择"继续"。
这会将生成的令牌放置在众所周知的位置,以便 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'
设置应用默认凭证 (ADC) 后,大多数语言的客户端库几乎不需要任何帮助即可找到它们。
Curl
测试此功能是否正常运行的最快方法是使用它通过 curl 访问 REST 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-genai
用于测试它的最小脚本可能是:
from google import genai
client = genai.Client()
print('Available base models:', [m.name for m in client.models.list()])
后续步骤
如果该脚本正常运行,您就可以尝试对文本数据进行 语义检索了。
自行管理凭据 [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-oauthlibpip install google-genai
2. 编写凭据管理器
为了尽量减少您必须点击授权屏幕的次数,请在工作目录中创建一个名为 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
from google import genai
from load_creds import load_creds
creds = load_creds()
client = genai.Client(credentials=creds)
print()
print('Available base models:', [m.name for m in client.models.list()])
4. 运行程序
在工作目录中,运行示例:
python script.py首次运行该脚本时,系统会打开一个浏览器窗口,并提示您授权访问。
如果您尚未登录 Google 账号,系统会提示您登录。如果您登录了多个账号,请务必选择在配置项目时设置为“测试账号”的账号。
授权信息存储在文件系统中,因此下次运行示例代码时,系统不会提示您进行授权。
您已成功设置身份验证。