マシン間通信のクライアントクレデンシャルフロー
ユーザーの操作が不要なサーバー間(M2M)通信で使用されるクライアントクレデンシャルグラントタイプを理解します。
Grant Types
詳細な説明
クライアントクレデンシャルグラント
クライアントクレデンシャルフローは最もシンプルなOAuth 2.0グラントタイプです。クライアント自身がリソースオーナーであるマシン間(M2M)シナリオ向けに設計されており、エンドユーザーは関与しません。
仕組み
トークンリクエスト: クライアントが
grant_type=client_credentialsで/tokenエンドポイントにPOSTリクエストを送信し、client_idとclient_secretで認証します(通常はHTTP Basic認証またはリクエストボディ内)。アクセストークン: 認可サーバーが資格情報を検証し、アクセストークンを返します。リフレッシュトークンは通常発行されません。
APIアクセス: クライアントがアクセストークンを使用してリソースサーバーのAPIを呼び出します。
リクエスト例
POST /token HTTP/1.1
Host: auth.example.com
Authorization: Basic czZCaGRSa3F0MzoZ...
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&scope=read%20write
レスポンス例
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read write"
}
セキュリティに関する考慮事項
- 資格情報を安全に保存できるコンフィデンシャルクライアント(バックエンドサービス、cronジョブなど)でのみ使用
- ブラウザやモバイルアプリでこのフローを使用しない
- クライアントシークレットを定期的にローテーション
- スコープを必要最小限に制限
- ユーザーコンテキストがないため、アクセストークンはユーザーではなくアプリケーション自体を表す
ユースケース
別の内部APIを呼び出す必要があるバックエンドマイクロサービス。例えば、サブスクリプションステータスを検索するためにユーザーデータベースサービスにクエリする課金サービス。リクエストにエンドユーザーは関与せず、サービスが自身として認証します。