https://example-client.com/mcp-metadata.json) 。CIMD URL はそのアプリケーションのクライアントIDであり、ドメイン所有権を証明することで、信頼できるテナント管理者のみがアプリケーションを登録できるようにします。
CIMD URL からアプリケーションをインポートすると、Auth0 はメタデータを取得、検証、保存し、そのアプリケーションを CIMD クライアントとして登録します。Auth0 はこれらの設定を記録しますが、ホストされている CIMD が引き続き信頼できる唯一の情報源であり、メタデータの更新は 手動更新 によって同期されます。このアプリケーション登録プロセスは、手動 CIMD 登録と呼ばれます。
手動 CIMD を使用して登録できるのは、サードパーティアプリケーションのみです。これらには、強化されたセキュリティ制御が適用されます。登録後、Auth0 で CIMD クライアントを設定 し、サードパーティアプリケーションとして使用します。
主な利点
- 漏えいするおそれがある共有の対称シークレットではなく、非対称暗号 (公開鍵/秘密鍵) を使用します。
- アプリケーション所有者は CIMD でクライアントのメタデータを直接管理し、Auth0 はそれらの更新を取得して保存するだけです。
- クライアントID は、安全な HTTPS ドメインでホストされる CIMD の URL であり、監査ログでは人が読み取れる所有権の証明として機能します。
CIMD クライアントを含むサードパーティアプリケーションでは、組織はサポートされていません。サードパーティアプリケーションでの組織のサポートは、今後のリリースで導入される予定です。
CIMD クライアントのレート制限は、今後のリリースで導入される予定です。CIMD クライアントごとに個別のレート制限を設定できるほか、テナント内のすべての CIMD クライアントからの集約トラフィックに対して共有レート制限も設定できるようになります。
ユースケース
- MCP クライアント: デプロイごとに一度だけ CIMD に登録すれば十分です。そのデプロイのすべてのインスタンスで同じ登録認証情報を使用します。Auth0 が MCP クライアントとサーバーをどのように保護しているかについては、Auth for MCP を参照してください。
- サードパーティ統合: 組織に代わってユーザーを認証するパートナーアプリケーション、SaaS プラットフォーム、外部サービス。これらのアプリケーションは独自のクライアントメタデータと暗号鍵を管理するため、秘密情報を共有することなく、個別に更新や鍵のローテーションを行えます。
CIMD の例
"token_endpoint_auth_method": "none" が設定されたパブリック MCP クライアントの CIMD の例です。
https://example-client.com/mcp-metadata.json
仕組み
フェーズ1: 登録
- アプリケーションの作成: テナント管理者は、次の方法でAuth0にCIMDアプリを作成します。
- Auth0 DashboardでImport from URLを選択する
/registerエンドポイントにPOSTリクエストを送信し、external_client_idを指定する
- メタデータの取得: Auth0はクライアントのドメインにGETリクエストを送信し、CIMD (client.json) を取得します。
- セキュリティ検証: Auth0はCIMD URLをマッピングし、CIMD URL検証ルールに基づいて検証するとともに、CIMD自体もCIMD検証ルールに基づいて検証します。この際、
external_client_idがCIMD URLと一致することなどを確認します。 - 永続化: 検証が完了すると、Auth0はクライアントのメタデータをデータベースに保存します。
- 確認: Auth0は成功レスポンスを返し、アプリケーションはAuth0でCIMDクライアントとして正常に登録されます。
- ユーザー主導のタスク: ユーザーは、アプリケーションによる API へのアクセスが必要なタスクを開始します。
- 認可リクエスト: アプリケーションは Auth0 認可サーバーにリクエストを送信し、
client_idとして CIMD URL を渡します。 - クライアントの解決: Auth0 認可サーバーはデータベースを照会し、指定された URL (
client_id) を保存済みのクライアント設定 (external_client_id) に対応付けます。 - ユーザーの同意: Auth0 はユーザーに同意画面を表示し、CIMD メタデータから取得した
client_nameを使ってアプリケーションを識別します。 - リダイレクト: ユーザーが同意すると、Auth0 は認可コードを付与し、ユーザーをアプリケーションにリダイレクトします。
- code の交換: アプリケーションは、トークンエンドポイントで認可コードをアクセストークンと交換します。
- 認可の完了: Auth0 認可サーバーは、
client_idが CIMD URL に設定されたアクセストークンを返します。これで、アプリケーションはユーザーに代わって API にアクセスできます。
前提条件
テナント設定
- CIMD サポートを有効にする: テナント設定で Client ID Metadata Document Registration トグルを有効にすると、Auth0 認可サーバーのメタデータに CIMD サポートが示され、接続時にクライアントがこの機能を自動的に検出できるようになります。
- Settings > Advanced に移動し、Settings セクションまでスクロールします。
- Client ID Metadata Document Registration をオンにします。
- Resource Parameter Compatibility Profile (任意) : MCP クライアントでは、テナント設定でこのプロファイルを有効にすることを推奨します。これにより、
audienceが指定されていない場合にresourceパラメーターを確認して、認可サーバーがリソース固有のリクエスト (RFC 8707) を処理できるようになります。
サポートされるクライアントタイプ
- アプリケーションタイプ: ネイティブアプリケーションまたは Regular Web Application である必要があります。
- サードパーティアプリケーション: サードパーティアプリケーション (
is_first_party: false) である必要があり、セキュリティ制御 の対象となります。登録後、Auth0 で CIMD クライアントを設定 し、サードパーティアプリケーションとして構成します。
サポートされる認証方法
client_secret_post、client_secret_basic、client_secret_jwt など、共有対称シークレットベースの認証方法は使用できません。
Auth0 では、クライアントがパブリッククライアントか機密クライアントかに応じて、CIMD クライアントに次の認証方法をサポートしています。
- パブリッククライアント:
- トークンエンドポイントでのクライアント認証は不要です。クライアントのメタデータで
token_endpoint_auth_methodをnoneに設定してください - 認可フローでは、Proof Key for Code Exchange (PKCE) を使用する必要があります
- トークンエンドポイントでのクライアント認証は不要です。クライアントのメタデータで
- 機密クライアント:
- Private Key JWT 認証 のみサポートされています。クライアントのメタデータで
token_endpoint_auth_methodをprivate_key_jwtに設定してください - 公開鍵をホストする
jwks_uriを指定してください。jwks_uriは、CIMD URL と完全に同じオリジン (スキーム、ホスト、ポート) である必要があります。詳しくは、CIMD JSON の検証ルール を参照してください。
- Private Key JWT 認証 のみサポートされています。クライアントのメタデータで
Private Key JWT 認証は、Enterprise のお客様のみ利用できます。Enterprise プランの詳細については、Pricing を参照するか、Auth0 Sales へお問い合わせください。
Private Key JWT 認証を使用する CIMD クライアントでは、新しい一意の
kid を持つ新しいキーペアを生成して、キー ローテーションを実装する 必要があります。手動 CIMD を使用してアプリケーションを登録する
- Auth0 Dashboard
- Management API
Auth0 Dashboard を使用して手動 CIMD でアプリケーションを登録するには、次の手順に従います。
- Applications > Applications に移動します。
- Create Application > Import from URL を選択します。
- CIMD URL を入力し、Preview を選択します。Auth0 は CIMD URL 検証ルールに基づいて CIMD URL を検証します。
- CIMD URL が有効な場合、Auth0 は CIMD を読み込み、CIMD JSON 検証ルールに基づいて検証します。クライアントのメタデータをプレビューし、検証エラーがあればトラブルシューティングします。
- Create を選択します。
CIMDクライアントを設定する
is_first_party: false) に限定されています。CIMD クライアントを登録したら、Auth0 でサードパーティアプリケーションとして設定します。
- APIアクセスポリシーを設定する: API へのアクセスを許可するクライアントグラントを作成します
- 接続をドメインレベルで利用可能にする: ユーザーを認証できるよう、接続をドメインまたはテナントレベルで利用可能にします
クライアントのメタデータを再取得する
app_type と grant_types を更新します。CIMD フィールドの詳細については、CIMD JSON の検証ルールを参照してください。
Auth0 Dashboard で次の操作を行います。
- Applications > Applications に移動し、CIMD クライアントを選択します。
- 画面右上の Refresh Client Metadata を選択します。
- Refresh Preview を選択して、CIMD の最新のクライアントメタデータをプレビューします。検証に関する警告やエラーを確認します。
- Save を選択します。
CIMDクライアントを取得する
/v2/clients/{clientId} エンドポイントに GET リクエストを送信します。ここで、{clientID} は CIMDクライアントに割り当てられた、Auth0 によって生成されたクライアントIDです。
external_client_id か CIMD URL を、/v2/clients エンドポイントのクエリパラメーターとして渡します。
external_client_id、name、callbacks、token_endpoint_auth_method などのフィールドを含む、CIMD クライアントの設定を返します。
CIMDクライアントを更新する
| Field | Description |
|---|---|
app_type | Auth0アプリケーションのタイプ。CIMDでは、これはapplication_typeからマッピングされ、native (ネイティブアプリ用) またはregular_web (Webアプリ用) のみに制限されます。 |
grant_types | 許可されるOAuth 2.0のグラントタイプ。CIMDでは、authorization_codeとrefresh_tokenのみに制限されます。その他のタイプはマッピング時に除外されます。 |
jwt_configuration.alg | IDトークンの署名に使用されるアルゴリズム。厳格なサードパーティクライアントとして、CIMDアプリケーションは通常、RS256、RS512、PS256などの安全な非対称アルゴリズムに制限されます。 |
description | クライアントの自由記述の説明です。CIMDメタデータから直接マッピングされ、最大140文字まで指定できます。 |
oidc_conformant | 厳格なサードパーティクライアントでは有効にする必要があります。これにより、クライアントがOIDC仕様に準拠することが保証され、CIMDクライアントでは通常変更できません。 |
allowed_origins | Cross-Origin Resource Sharing (CORS) で許可されるURLの一覧。通常はブラウザーベースのアプリケーションで使用されます。 |
web_origins | Webベースのフロー (例: サイレント認証) で許可されるURLの一覧。 |
refresh_token.* | rotation_type、leeway、および各種有効期間設定を含む、リフレッシュトークンの動作に関する設定です。これらは、リフレッシュトークンの有効期間や、使用時にローテーションするかどうかを制御します。 |
organization_* | usage、require_behaviour、discovery_methods、default_organizationを含む、組織固有のフローに関する設定です。これらは、クライアントがAuth0の組織とどのように連携するかを決定します。 |
client_metadata | 標準のAuth0プロパティにマッピングされない、クライアントに関する追加情報を格納するための任意のキーと値のペアです。 |
require_proof_of_possession | クライアントが鍵の所持証明を提示する必要があるかどうかを示します。多くの場合、DPoPまたはmTLSとともに使用されます。 |
/v2/clients/{clientId}エンドポイントに対してPATCHリクエストを送信します。ここで、{clientID}はCIMDクライアントに割り当てられたAuth0生成のクライアントIDです。
CIMD URL の検証ルール
| Category | Rule | Requirement |
|---|---|---|
| Protocol | HTTPS Required | https:// スキームを使用する必要があります。 |
| Host | No Localhost | localhost、127.0.0.1、::1 は使用できません。 |
| Valid Hostname | 空でないホスト名を含める必要があります。トリプルスラッシュ (例: https:///) は使用できません。 | |
| Path | Path Component | ルート / より先のパスを含める必要があります。 |
| No Dot Segments | パスに . または .. (エンコードされた %2e を含む) を含めることはできません。 | |
| Constraints | Length Limit | 最大 120 バイトです。 |
| No Whitespace | 先頭または末尾に空白を含めることはできません。 | |
| Format | URL として解析可能な空でない文字列である必要があります。 | |
| Forbidden | No Credentials | URL に username またはパスワードを含めることはできません。 |
| No Fragments | フラグメント識別子 (#) は使用できません。 | |
| No Query | クエリ文字列 (?) は使用できません。 | |
| No Port 0 | ポート 0 は予約済みのため、使用できません。 | |
| Encoding | Percent-Encoding | % の直後には、必ず 2 桁の 16 進数が続く必要があります。 |
CIMD JSON 検証ルール
- サポートされていないプロパティ: Auth0 は、マッピング時にサポートされていないプロパティを無視し、検証レスポンスで警告として報告します。
- インライン JWKS:
jwks_uriではなくインラインのjwksオブジェクトを指定することはサポートされておらず、invalid_client_metadataエラーが発生します。 - 秘密鍵:
jwks_uri経由で取得した JWKS に秘密鍵の情報 (dパラメーター) が含まれている場合は拒否されます。 - 取得時のセキュリティ: CIMD ドキュメントと
jwks_uriには、それぞれ 5KB と 12KB のサイズ制限が適用され、どちらも HTTP リダイレクトはサポートされていません。
| Property | Required | Type | Validation Rules | Auth0 Mapping |
|---|---|---|---|---|
client_id | はい | String | ドキュメントのホスト先と完全に一致する有効な HTTPS URL である必要があります。 | external_client_id |
client_name | はい | String | 空でない文字列である必要があります。 | name |
redirect_uris | 条件付き | String Array | grant_types に authorization_code または implicit が含まれる場合は必須です。一意の HTTPS URI である必要があります (ネイティブアプリではループバックを許可) 。 | callbacks |
grant_types | はい | String Array | 少なくとも 1 つのサポート対象タイプ (authorization_code または refresh_token) を含める必要があります。サポートされていないタイプは警告を生成し、除外されます。 | grant_types |
application_type | いいえ | String | native または web のみ使用できます。不明な値は拒否されます。デフォルトは web です。 | app_type |
token_endpoint_auth_method | いいえ | String | none または private_key_jwt をサポートします。対称鍵方式 (例: client_secret_post) は禁止されています。 | token_endpoint_auth_method |
jwks_uri | 条件付き | String | token_endpoint_auth_method が private_key_jwt の場合は必須です。client_id と同じオリジンの HTTPS URL である必要があります。 | jwks_uri |
logo_uri | いいえ | String | 有効な HTTP または HTTPS URL である必要があります。 | logo_uri |
description | いいえ | String | 最大 140 文字の自由記述テキストです。 | description |
response_types | いいえ | String Array | OIDC の整合性について検証されますが、保持はされません。grant_types に authorization_code が含まれていないのに code が含まれている場合は警告が生成されます。 | (なし) |
セキュリティ上の考慮事項
Private Key JWT 認証の CIMD クライアント鍵ローテーション
kid を持つ新しいキーペアを生成します。秘密鍵をローテーションし、同じ kid のまま新しい鍵情報で JWKS を更新すると、Auth0 の CIMD 登録では新しい鍵が拒否され、古い鍵が保持されます。これにより、鍵のローテーションでは新しい鍵を明示的に追加する必要があり、気付かないうちに置き換えられることはありません。
鍵をローテーションした後は、必ず Auth0 で鍵登録を更新してください。詳細については、署名鍵のローテーション を参照してください。