OAuth 認可サーバーとしての MaiAgent
Claude などの MCP クライアントを OAuth 2.1(認可コード+PKCE)で MaiAgent MCP に接続するための、エンドポイント、アプリケーション登録、Redirect URI、トークンの有効期間とローテーション、scope の実際の作用を説明します
MaiAgent には OAuth 2.1 認可サーバーが組み込まれています。Claude などの MCP クライアントは、設定ファイルに API Key を貼り付けることなく、OAuth で MaiAgent MCP に接続できます。メンバーがブラウザーでログインして認可すると、クライアントは短期間有効なアクセストークンを取得し、そのメンバーとして MaiAgent を操作します。本ページは、従業員が MCP クライアントから自分のアカウントで MaiAgent に接続できるようにする顧客企業の IT 担当者と、自社サービスからメンバーとして MaiAgent を呼び出す開発者を対象としています。
本ページでは MaiAgent がトークンを発行する場合を説明します。逆方向、つまり MaiAgent がサードパーティーの OAuth サービスに接続する場合は、OAuth 2.0 連携と Token 自動更新の仕組みを参照してください。
OAuth と API Key の選び方
表す ID
認可したメンバー本人です
キーに紐付けられたメンバーです
提供方法
メンバーがブラウザーでログインして同意します。秘密情報を扱う必要はありません
キーをコピーしてクライアント設定に貼り付けます
有効期間
アクセストークンは1時間有効で、クライアントが自動更新します
キーの有効期限に従います。無期限にも設定できます
SSO のみでログインし、MaiAgent のパスワードを持たないメンバーは、現在 OAuth 認可を完了できません(ログインと同意を参照してください)。このようなメンバーには API Key を使用してください。
エンドポイント
SaaS の認可サーバーは https://api.maiagent.ai です。オンプレミス・プライベートクラウド環境では、自社プラットフォームのドメインに置き換えてください。メタデータ内の URL はリクエストのドメインに基づいて生成されます。
認可サーバーメタデータ(RFC 8414)
GET /.well-known/oauth-authorization-server
認可
GET /o/authorize/
トークン交換
POST /o/token/
トークン失効(RFC 7009)
POST /o/revoke_token/
メタデータに記載される機能は次のとおりで、実際の動作と一致しています:
response_types_supported
code
grant_types_supported
authorization_code、refresh_token
code_challenge_methods_supported
S256
token_endpoint_auth_methods_supported
none、client_secret_basic、client_secret_post
scopes_supported
read、write
MaiAgent は動的クライアント登録(Dynamic Client Registration)に対応していません。メタデータに registration_endpoint はありません。MCP クライアントは事前登録済みの Client ID を入力できる必要があります。まず次のセクションに従って組織内にアプリケーションを登録してください。
組織に OAuth アプリケーションを登録します
管理画面の 組織設定 → 組織概要 → 管理操作 → OAuth アプリケーション でアプリケーションを作成し、Client ID を取得します。ページの 接続情報 カードには Discovery、Authorize、Token エンドポイントが表示されます。作成手順、管理権限、Client Secret の保存・再生成については、ユーザーマニュアルの OAuth アプリケーションを参照してください。連携時は次の点に注意してください:
アプリケーションの種類は作成後に変更できません:Public は MCP クライアント(Claude など)向けで、PKCE で認可し、client secret は発行されません。Confidential はサーバー側の連携向けで、client secret が発行されます。
Client Secret を再生成すると旧 secret は即座に無効になりますが、発行済みトークンには影響しません。アプリケーションを削除すると、それを通じて接続する全メンバーのトークンが即座にすべて無効になります。
各組織で作成できる OAuth アプリケーションは最大 20 個です。
同じ機能を API でも利用できます:
/api/v1/oauth/applications/(GET、POST、PATCH、DELETE、およびPOST …/{id}/regenerate-secret/)。権限ルールは管理画面と同じです。
Redirect URI のルール
完全一致で照合します:scheme、ホスト、ポート、パスがすべて一致する必要があります。ワイルドカードには対応していません。登録した URI にクエリパラメータがある場合は、認可リクエストにも含める必要があります。
https://のみ受け付けます。http://はローカルコールバック(localhost、127.0.0.1、::1)に限ります。ローカルコールバックのポート:
http://127.0.0.1/…またはhttp://[::1]/…を登録した場合、認可リクエストでは任意のポートを使用できます(RFC 8252)。http://localhost:<ポート>/…を登録した場合は、ポートが完全に一致する必要があります。ローカル MCP クライアントが毎回ランダムなポートを選ぶ場合は、127.0.0.1の形式で登録してください。Web 版 MCP クライアントのコールバック URL は、そのクライアントのドキュメントに従ってください。管理画面のフォームの例は
https://claude.ai/api/mcp/auth_callbackです。
認可フロー
MCP クライアントが MaiAgent MCP(SaaS では https://mcp.maiagent.ai/mcp)に接続する際のフローは次のとおりです:
クライアントが認証情報を送信しない場合、MCP サーバーは
401を返し、WWW-Authenticateヘッダーでhttps://mcp.maiagent.ai/.well-known/oauth-protected-resource/mcpを指定します。クライアントはこのリソースメタデータ(RFC 9728)を読み取ります。
authorization_serversはhttps://api.maiagent.aiを指定しており、続いて認可サーバーメタデータを読み取ります。クライアントはブラウザーで
/o/authorize/を開き、メンバーがログインして同意します。MaiAgent は認可コードを Redirect URI にリダイレクトします。クライアントは
code_verifierを/o/token/に送信してトークンを取得します。以後の各呼び出しには
Authorization: Bearer <access_token>を付けます。アクセストークンが期限切れまたは失効すると、MCP サーバーは401を返し、クライアントはリフレッシュトークンで新しいトークンを取得します。
クライアントを独自実装する場合、認可リクエストとトークン交換リクエストは次の形式です:
PKCE は常に必須です。Public、Confidential のどちらも同様で、
code_challenge_methodにはS256を使用します。Confidential アプリケーションでは、さらに HTTP Basic(
client_secret_basic)またはフォームフィールドclient_secret(client_secret_post)で secret を送信します。認可コードの有効期間は 300 秒です。
トークン交換のレスポンスには
access_token、token_type(Bearer)、expires_in(3600)、refresh_token、scopeが含まれます。
ログインと同意
認可ページのログイン画面では Email とパスワードのみを使用できます。MaiAgent のパスワード、または組織が LDAP 認証を有効にしている場合は企業のパスワードを使用します。SSO ログインボタンはないため、SSO のみでログインし、パスワードを持たないアカウントは認可を完了できません。
同意ページには、アプリケーション名、所属組織、現在ログインしているメンバーの Email が表示されます。
メンバーがすでにこのアプリケーションの有効なトークンを持っている場合、再接続時に同意ページをスキップします。
トークンが表すユーザーと所属組織
トークンは認可したメンバーを表します。組織はアプリケーションが所属する組織に固定され、呼び出し時に
X-Organization-Idヘッダーは不要で、参照もされません。呼び出し時点で、そのメンバーは組織の有効なメンバーである必要があります。メンバーが無効化・組織から削除された場合や、組織が削除された場合、トークンは即座に使用できなくなり、API は
401を返します。アクセストークンでプラットフォームの REST API を直接呼び出すこともできます(
Authorization: Bearer <access_token>)。権限判定は API Key と同じです。例外として、AI Gateway の OpenAI 互換エンドポイントは API Key のみ受け付けます。自分のアカウントの削除などの高リスク操作は対話型ログインのみ受け付けます。
トークンの有効期間とローテーション
認可コード
300 秒です
アクセストークン
3600 秒(1時間)です
リフレッシュトークン
使用するたびにローテーションします。レスポンスに新しいリフレッシュトークンが含まれ、旧トークンは無効になります
ローテーション後の再送
ネットワークや並行処理により同じリクエストを再送する場合、直前にローテーションした旧リフレッシュトークンは 120 秒以内であれば使用できます
明示的な失効
即座に有効になり、120 秒の猶予はありません
リフレッシュトークンの有効期間
固定の有効期間に依存しないでください。失効、アプリケーションの削除、メンバーの無効化により使用できなくなります。トークンエンドポイントが invalid_grant を返すかどうかで判断してください
連携側で invalid_grant を受け取った場合は、そのリフレッシュトークンの使用を停止し、メンバーに再認可を案内してください。バックグラウンドで再試行しないでください。失効とローテーションの詳細はリフレッシュトークンが失効・無効化された場合を参照してください。
トークンを失効させる方法は3つあります:
連携側
POST /o/revoke_token/ に token(任意で token_type_hint)とクライアント認証情報を送信します
単一のトークンです
メンバー本人
GET /api/v1/oauth/authorized-applications/ で自分が認可したアプリケーションを一覧取得し、DELETE /api/v1/oauth/authorized-applications/{id}/ で失効させます
そのメンバーがそのアプリケーションに付与したすべてのトークンです
組織管理者
OAuth アプリケーションを削除します
全メンバーがそのアプリケーションに付与したすべてのトークンです
リフレッシュトークンが失効・無効化された場合
リフレッシュトークンを明示的に失効させると、即座にアクセストークンとの交換に使用できなくなります。連携側が引き続きそのトークンを POST /o/token/ に送信すると、HTTP 400 とエラーコード invalid_grant が返ります。連携側では次のように処理してください:
invalid_grantを受け取ったら、そのリフレッシュトークンの使用を停止し、メンバーに再認可を案内してください。バックグラウンドで再試行しないでください。メンバーが認可済みアプリケーション全体を取り消すと、そのメンバーがそのアプリケーションに付与したすべてのトークンが失効し、旧リフレッシュトークンはすべて使用できなくなります。
通常のローテーション後、ネットワークや並行処理によって同じリクエストを再送する場合、直前にローテーションした旧リフレッシュトークンには 120 秒の再試行猶予があります。この猶予は明示的な失効には適用されません。
invalid_grant は再認可が必要であることを示します。明示的に失効させた後も 120 秒間使用できると考えないでください。また、リフレッシュトークンの固定の有効期間に基づいて再認可を予定しないでください。
scope の実際の作用
認可サーバーは read と write の2つの scope を受け付けます。認可リクエストで scope を省略した場合は、デフォルトで両方を付与します。現在、scope はどの API も制限しません。実行できる操作はすべてメンバーのロール権限で決まり、管理画面へのログインや API Key の使用時と同じです。MCP クライアントが実行できる操作を制限するには、そのユーザー向けに専用ロールを設計してください。ユーザーマニュアルのロール権限管理を参照してください。
よくある質問
最終更新
役に立ちましたか?