驗證 Gemini API 最簡單的方式,就是設定 API 金鑰,如 Gemini API 快速入門導覽課程所述。如果需要更嚴格的存取控制,可以改用 OAuth。本指南將協助您設定 OAuth 驗證機制。
本指南採用簡化的驗證方法,適合測試環境使用。如為實際工作環境,請先瞭解驗證和授權,再選擇適合應用程式的存取憑證。
目標
- 設定 OAuth 的雲端專案
- 設定 application-default-credentials
- 在您的計畫中管理憑證,而非使用
gcloud auth
必要條件
如要執行本快速入門導覽課程,您需要:
設定雲端專案
如要完成這個快速入門課程,您必須先設定 Cloud 專案。
1. 啟用 API
如要使用 Google API,您必須先在 Google Cloud 專案中啟用這些 API。
在 Google Cloud 控制台中啟用 Google 生成式語言 API。
2. 設定 OAuth 同意畫面
接著,請設定專案的 OAuth 同意畫面,並將自己新增為測試使用者。如果您已為 Cloud 專案完成這個步驟,請直接跳到下一節。
在 Google Cloud 控制台中,依序前往「Menu」>「APIs & Services」>「OAuth consent screen」。
為應用程式選取「External」(外部) 使用者類型,然後按一下「Create」(建立)。
填妥應用程式註冊表單 (大部分欄位可留空),然後按一下「儲存並繼續」。
您現在可以略過新增範圍的步驟,然後按一下「儲存並繼續」。日後當您建立用於 Google Workspace 機構外部的應用程式時,必須新增並驗證應用程式所需的授權範圍。
新增測試使用者:
- 在「測試使用者」下方,點選「新增使用者」。
- 輸入您的電子郵件地址和其他授權測試使用者,然後按一下「儲存並繼續」。
查看應用程式註冊摘要。如要修改資訊,請按一下「編輯」。如果應用程式註冊作業一切正常,請按一下「返回資訊主頁」。
3. 授權電腦版應用程式的憑證
如要以使用者身分進行驗證,並存取應用程式中的使用者資料,您必須建立一或多個 OAuth 2.0 用戶端 ID。用戶端 ID 可讓 Google 的 OAuth 伺服器識別單一應用程式。如果您的應用程式在多個平台上執行,則必須為每個平台建立專屬的用戶端 ID。
在 Google Cloud 控制台中,依序前往「選單」>「API 和服務」>「憑證」。
依序點選「建立憑證」 >「OAuth 用戶端 ID」。
依序點選「應用程式類型」>「桌面應用程式」。
在「Name」欄位中輸入憑證名稱。這個名稱只會顯示在 Google Cloud 控制台中。
點選「Create」(建立),系統會顯示「OAuth client created」(已建立 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'
設定應用程式預設憑證 (ACD) 後,大多數語言的用戶端程式庫都不需要或只需要很少的協助,就能找到這些憑證。
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-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. 編寫憑證管理工具
為盡量減少您必須點選授權畫面次數,請在工作目錄中建立名為 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
首次執行指令碼時,系統會開啟瀏覽器視窗,並提示您授權存取權。
如果您尚未登入 Google 帳戶,系統會提示您登入。如果您登入了多個帳戶,請務必選取您在設定專案時設為「測試帳戶」的帳戶。
授權資訊會儲存在檔案系統中,因此下次執行程式碼範例時,系統不會提示授權。
您已順利完成驗證設定。