Gemini API の認証を行う最も簡単な方法は、Gemini API クイックスタートで説明されているように API キーを構成することです。より厳密なアクセス制御が必要な場合は、代わりに OAuth を使用できます。このガイドでは、OAuth による認証を設定する方法について説明します。
このガイドでは、テスト環境に適した簡素な認証方法を使用します。本番環境の場合は、アプリに適したアクセス認証情報を選択する前に、認証と認可について学習してください。
目標
- OAuth 用の Cloud プロジェクトを設定する
- application-default-credentials を設定する
gcloud auth
を使用する代わりに、プログラムでクルデンシャルを管理します
前提条件
このクイックスタートを実行するには、以下のものが必要です。
クラウド プロジェクトを設定する
このクイックスタートを完了するには、まず Cloud プロジェクトを設定する必要があります。
1. API を有効にする
Google API を使用する前に、Google Cloud プロジェクトで有効にする必要があります。
Google Cloud コンソールで、Google Generative Language API を有効にします。
2. OAuth 同意画面を構成する
次に、プロジェクトの OAuth 同意画面を構成し、自分自身をテストユーザーとして追加します。Cloud プロジェクトでこの手順をすでに完了している場合は、次のセクションに進みます。
Google Cloud コンソールで、メニュー > [API とサービス] > [OAuth 同意画面] に移動します。
アプリのユーザータイプに [外部] を選択し、[作成] をクリックします。
アプリ登録フォームに入力します(ほとんどの項目は空白のままにできます)。[保存して続行] をクリックします。
ここでは、スコープの追加をスキップして [保存して次へ] をクリックします。今後、Google Workspace 組織の外部で使用するアプリを作成する場合は、アプリに必要な認可スコープを追加して検証する必要があります。
テストユーザーを追加します。
- [テストユーザー] で [ユーザーを追加] をクリックします。
- メールアドレスと他の承認済みテストユーザーを入力し、[保存して次へ] をクリックします。
アプリ登録の概要を確認します。変更するには、[編集] をクリックします。アプリの登録に問題がない場合は、[Back to Dashboard] をクリックします。
3. デスクトップ アプリケーションの認証情報を承認する
エンドユーザーとして認証を行い、アプリ内でユーザーデータにアクセスするには、1 つ以上の OAuth 2.0 クライアント ID を作成する必要があります。クライアント ID は、Google の OAuth サーバーで個々のアプリを識別するために使用します。アプリが複数のプラットフォームで実行される場合は、プラットフォームごとに個別のクライアント ID を作成する必要があります。
Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。
[認証情報を作成] > [OAuth クライアント ID] をクリックします。
[アプリケーションの種類] > [デスクトップ アプリ] をクリックします。
[名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
[作成] をクリックします。OAuth クライアントの作成画面が開き、新しいクライアント ID とクライアント シークレットが表示されます。
[OK] をクリックします。新しく作成された認証情報が [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)を設定すると、ほとんどの言語のクライアント ライブラリは、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)
多くの場合、クライアント ID(client_secret.json
)からアクセス トークンを作成するための gcloud
コマンドは使用できません。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 アカウントにログインしていない場合は、ログインを求められます。複数のアカウントにログインしている場合は、プロジェクトの構成時に「テスト アカウント」として設定したアカウントを選択してください。
認証情報はファイル システムに保存されるため、次回サンプルコードを実行するときに認証を求められることはありません。
認証が正常に設定されました。