# ADKの便利で実践的な使い方
🔐 APIキー、Bearer Token、OAuth2、OpenID Connect、サービスアカウント — ADKのAuthentication機能は、あらゆる認証方式をツールにシームレスに統合します。
📌 タイトル:Authentication — ツールの認証統合
🔗 URL:
🧩 概要
ADKのAuthentication機能は、AuthSchemeとAuthCredentialの2つのコンポーネントで構成されます。APIKey、HTTP Bearer、OAuth2、OpenID Connect、SERVICE_ACCOUNTの各認証方式をサポートし、ツールの認証を統一的に管理できます。OAuth2ではブラウザフローにも対応し、`tool_context.state`を使ったトークンキャッシュや、トークン有効期限の管理も可能です。
🛠 使い方
各認証方式の設定例です。
`google.adk.auth` から `AuthScheme`、`AuthCredential`、`APIKeyAuth`、`HTTPBearerAuth`、`OAuth2Auth` をインポートします。APIキー認証では `APIKeyAuth(header_name="X-API-Key")` でスキームを作成し、`AuthCredential(api_key="sk-your-api-key")` でクレデンシャルを設定します。HTTP Bearer認証では `HTTPBearerAuth()` と `AuthCredential(token="your-bearer-token")` を使います。OAuth2認証(ブラウザフロー)では `OAuth2Auth(authorization_url="", token_url="", scopes=["read", "write"])` でスキームを定義し、`AuthCredential(client_id="your-client-id", client_secret="your-client-secret")` でクレデンシャルを渡します。
ツールでの認証の活用:
ツール内での認証活用例として、`call_protected_api(endpoint: str, tool_context: ToolContext)` 関数を定義します。`tool_context.state.get("user:api_token")` でキャッシュ済みトークンを取得し、有効期限内であればそのまま使用します。期限切れの場合は `refresh_token(tool_context)` で新しいトークンを取得し、`tool_context.state["user:api_token"]` に保存してキャッシュします。取得したトークンを `Authorization: Bearer` ヘッダーに設定してAPIを呼び出します。
🏗 実践的な使い方
**トークンキャッシュ戦略**: `tool_context.state`の`user:`プレフィックスを使ってトークンをキャッシュすることで、同一ユーザーのセッション内でトークンの再取得を避けられます。有効期限の管理も忘れずに実装しましょう。
トークンキャッシュの実践例として `get_or_refresh_token(tool_context: ToolContext) -> str` を定義します。`tool_context.state.get("user:oauth_token")` からトークンデータを取得し、`expires_at` を確認して有効期限内(60秒のバッファ付き)であれば `access_token` をそのまま返します。期限切れの場合は `oauth_client.refresh(refresh_token=...)` で新しいトークンを取得し、`tool_context.state["user:oauth_token"]` に `access_token`、`refresh_token`、`expires_at` を含む辞書として保存します。
**サービスアカウント認証**: GCPサービス間の通信では、SERVICE_ACCOUNT認証を使うことで、ユーザーの介入なしにセキュアなAPI呼び出しが可能です。
**認証の多層化**: 同一エージェント内で複数の認証方式を使い分ける場合、ツールごとに異なる認証を設定できます。OpenAPIToolsetの`auth_scheme`/`auth_credential`と組み合わせると効果的です。
💡 ユースケース
🔑 APIキーによるサードパーティAPI認証
🌐 OAuth2によるユーザー代理でのAPI操作
🏗️ サービスアカウントによるGCPサービス間連携
🔄 トークンのキャッシュと自動リフレッシュ
⚠️ 注意点
- 認証情報(APIキー、シークレット)はコードにハードコードせず、環境変数やSecret Managerから取得してください。
- OAuth2のブラウザフローはサーバーサイドのバッチ処理では使えません。サービスアカウントやクライアントクレデンシャルフローを検討してください。
- トークンの有効期限管理を怠ると、期限切れトークンでのAPI呼び出しが401エラーになります。バッファを持った自動リフレッシュを実装しましょう。
✨ ADKの認証機能を適切に設定すれば、セキュアなAPI連携をツール内にシームレスに組み込めます。認証はエージェントの信頼性の土台です!
#
ADK# #
AIAgent#