Secure Steady
クライアントクレデンシャル - クライアントクレデンシャルフロー の使い方・オプション・サンプル

クライアントクレデンシャル - クライアントクレデンシャルフロー

サーバー間通信(M2M)向けのフロー。ユーザーの関与なしにクライアント自身の認証情報でトークンを取得する。

概念図

クライアントクレデンシャルフロー diagram

実例

トークンエンドポイントへのリクエスト(client_id + client_secret)

bash
curl -X POST https://auth.example.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=read:reports write:logs"

取得したアクセストークンで API にアクセスする例

bash
# 取得したアクセストークンで API にアクセス
curl -X GET https://api.example.com/v1/reports \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..." \
  -H "Accept: application/json"

クレデンシャルを環境変数で安全に管理する例

bash
# クレデンシャルを環境変数で管理
export CLIENT_ID="your-client-id"
export CLIENT_SECRET="your-client-secret"

curl -X POST https://auth.example.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=${CLIENT_ID}" \
  -d "client_secret=${CLIENT_SECRET}"

フローの全体像

クライアントクレデンシャルフローは、ユーザーが関与しないサーバー間通信(Machine-to-Machine: M2M)に特化した OAuth 2.0 のグラントタイプです。

処理の流れ

  1. クライアント(バックエンドサービス)が client_idclient_secret を認可サーバーのトークンエンドポイントに送信する
  2. 認可サーバーがクライアントの資格情報を検証し、アクセストークンを発行する
  3. クライアントはアクセストークンを使ってリソースサーバーの API にアクセスする

認可コードフローや PKCE フローと異なり、ブラウザのリダイレクトやユーザーの同意画面は存在しません。

主なユースケース

  • マイクロサービス間通信: サービス A がサービス B の API を呼び出す場合
  • バッチ処理・定期ジョブ: 夜間バッチが外部 API からデータを取得する場合
  • 管理ツール・CLI: 管理者向けの自動化スクリプトが API を操作する場合
  • IoT デバイスのバックエンド: デバイス管理サーバーがクラウド API と通信する場合

セキュリティ上の注意点

クライアントクレデンシャルフローでは、client_secret がそのまま認証に使われるため、その管理が最も重要です。

クレデンシャルの安全な管理

  • ソースコードに直接埋め込まない: 環境変数、シークレット管理サービス(AWS Secrets Manager, HashiCorp Vault 等)を使用する
  • ログに出力しない: リクエストログやエラーログに client_secret が含まれないよう注意する
  • 定期的にローテーションする: クレデンシャルを定期的に更新し、漏洩時の影響を抑える

スコープの制限

  • トークンリクエスト時に必要最小限のスコープを指定する
  • 認可サーバー側でクライアントごとに許可スコープを制限する
  • 管理操作と読み取り操作でクライアントを分離することも有効

トークンの有効期限

  • アクセストークンの有効期限は短く設定する(推奨: 15-60 分)
  • クライアントクレデンシャルフローでは通常リフレッシュトークンは発行されない(クレデンシャル自体で再取得が可能なため)
  • 有効期限切れ時は新しいトークンをリクエストする実装にする

関連トピック