クライアントIDメタデータ・ドキュメント

検出、モデル・コンテキスト・プロトコル(MCP)認可、サポートされているOAuthフロー、検証およびセキュリティ制約など、アイデンティティ・ドメインでクライアントIDメタデータ・ドキュメント(CIMD)がIAMとどのように連携するかについて学習します。

CIMDサポートの概要

アイデンティティ・ドメインを使用するIAMは、OAuth認可時にMCPクライアントが使用する標準およびプロトコル機能をサポートしています。関連する機能は次のとおりです。

  • /.well-known/oauth-authorization-serverを介したOAuth認可サーバー・メタデータ。
  • OAuthトークン・リクエストのリソース・インジケータ・サポート。
  • クライアントIDメタデータ・ドキュメント(CIMD)のサポート。
  • 拡張されたトークン交換によるアプリケーション間アクセス。

クライアントIDメタデータ・ドキュメント(CIMD)を使用すると、OAuthクライアントは、クライアント・ホスト・メタデータ・ドキュメントのHTTPS URLをclient_idとして使用できます。メタデータ・ドキュメントでは、クライアントとそのOAuth構成(リダイレクトURI、サポートされている権限付与タイプ、レスポンス・タイプ、トークン・エンドポイント認証方法など)について説明します。

CIMDでは、クライアントは、使用するすべてのアイデンティティ・ドメインで永続的なOAuthクライアント登録を必要としません。かわりに、クライアントは安定したHTTPS URLでメタデータ・ドキュメントを公開します。クライアントはOAuthフローを開始するときに、そのURLをclient_idとして提供します。

アイデンティティ・ドメインは、クライアントがOAuthフローに参加できるかどうかを引き続き制御します。CIMDクライアントを受け入れる前に、アイデンティティ・ドメインはメタデータの場所が信頼できることを確認し、取得したクライアント・メタデータを検証します。また、保護されたリソースへのアクセスは、リソース・アプリケーションによって明示的に制御されます。

標準OAuthセキュリティ要件は引き続き適用されます。クライアントのタイプおよび権限に応じて、これらの要件には、Proof Key for Code Exchange (PKCE)、リダイレクトURI検証、クライアント認証、ユーザーの同意、スコープ検証およびトークン検証が含まれます。

これらの標準および仕様の詳細は、次のリソースを参照してください。

サポートされているユース・ケース

CIMDを使用するタイミング

OAuthクライアントがアイデンティティ・ドメイン間で動作する必要があり、すべてのドメインで永続的なクライアント登録を保持すると、不要な管理オーバーヘッドが発生する場合は、CIMDを検討してください。

CIMDは、次のクライアントに特に役立ちます。

  • 多数のユーザーまたは環境に配布されるクライアント
  • 頻繁に更新されるクライアント
  • 動的に検出またはインスタンス化されたクライアント
  • ローカルで実行され、ループバック・リダイレクトURIを必要とするクライアント
  • 共有クライアント・シークレットを使用せずに認証する必要があるクライアント
  • 複数のアイデンティティ・ドメインで同じクライアント・アイデンティティを使用する必要があるクライアント

CIMDクライアントは、安定したHTTPS URLでメタデータを公開する必要があります。メタデータの取得に使用されるURLは、クライアントのOAuth client_idでもあります。

AIエージェントおよびMCPクライアント

AIエージェントおよびModel Context Protocol (MCP)クライアントは、広範囲に分散したり、頻繁に更新したり、動的に検出したりできます。各クライアントを各アイデンティティ・ドメインに個別に登録すると、デプロイメントと管理が困難になる場合があります。

CIMDを使用すると、AIエージェントまたはMCPクライアントは1つのクライアント・メタデータ・ドキュメントを公開し、そのHTTPS URLをOAuth client_idとして使用できます。

例:

https://client.example.com/oauth/client-metadata.json

クライアントは、OAuth認可およびトークン・リクエストで同じ値を使用します。

このユース・ケースでは、次のステップを実行します。

  1. クライアント・パブリッシャは、メタデータ・ドキュメントを安定したHTTPSの場所でホストします。
  2. アイデンティティ・ドメイン管理者は、メタデータの場所を信頼できるものとして構成します。
  3. クライアントは、メタデータ・ドキュメントURLをclient_idとして使用します。
  4. アイデンティティ・ドメインは、OAuthリクエストの処理時にメタデータを取得および検証します。
  5. クライアントが保護されたリソースへのアクセスをリクエストした場合、リソース・アプリケーションはCIMDクライアントを明示的に認可する必要があります。
  6. 通常のOAuth認可、同意、スコープおよびトークン処理は引き続き適用されます。

メタデータの場所を信頼しても、保護されたリソースへのアクセス権は自動的に付与されません。信頼によって、アイデンティティ・ドメインがクライアント・メタデータを処理できることが確立されます。リソース認可によって、クライアントがアクセスできる保護リソースが個別に決定されます。

開発者およびデスクトップ・アプリケーション

開発者ツールおよびデスクトップ・アプリケーションは、通常、認可のためにWebブラウザを使用しますが、ローカル・アプリケーション・リスナーを介して認可レスポンスを受け取ります。

これらのクライアントは、次のようなループバック・リダイレクトURIを使用できます。

http://127.0.0.1/callback

または:

http://localhost/callback

クライアントは、使用可能なポートでローカル・リスナーを起動できます。次に例を示します。

http://localhost:8000/callback

CIMDは、すべてのアイデンティティ・ドメインで個別の永続クライアント登録を必要とせずに、このシナリオをサポートします。

パブリック開発者またはデスクトップクライアントの場合は、次の手順を実行します。

  1. 許可されたループバック・リダイレクトURIをCIMDメタデータに公開します。
  2. 認可コード・フローを使用します。
  3. PKCEを使用します。
  4. 必要なPKCEパラメータを認可リクエストに含めます。
  5. 認可コードをトークンと交換するときに、対応するcode_verifierを送信します。

リダイレクトURI検証は厳密なままです。許可される各リダイレクトは、クライアントのメタデータ内で宣言する必要があります。HTTPリダイレクトは、サポートされているループバック・アドレスのみを対象としています。承認されたループバック・リダイレクトの場合、ローカルで実行中のアプリケーションが使用可能なポートを選択できるように、ポートは異なる場合があります。

たとえば、クライアント・メタデータは次のことを宣言できます。

{
  "redirect_uris": [
    "http://localhost/callback",
    "http://127.0.0.1/callback"
  ]
}

サポートされている認可リクエストでは、動的に選択されたループバック・ポートを使用できます。

http://localhost:8000/callback

アイデンティティ・ドメインは、認可リクエストを完了する前に、サポートされているループバック・リダイレクト・ルールに従ってリダイレクトが行われることを検証します。

機密クライアント

CIMDは、private_key_jwtで認証する機密クライアントでも使用できます。

このモデルにより、クライアントは共有クライアント・シークレットのかわりに非対称キーを使用して認証できます。クライアントは秘密キーを使用してクライアント・アサーションに署名し、そのメタデータは対応する公開キーの検索に必要な情報を提供します。

このユース・ケースでは、次のステップを実行します。

  1. クライアントのトークン・エンドポイント認証方法をprivate_key_jwtに設定します。
  2. クライアント・メタデータに有効なjwks_uriを指定してください。
  3. 参照されるJSON Web Key Set (JWKS)エンドポイントを介してクライアントの公開キーを公開します。
  4. 対応する秘密キーでクライアント・アサーションに署名します。
  5. CIMD URLをトークン・リクエストのクライアント識別子として使用します。

クライアント認証中、アイデンティティ・ドメインは、クライアント・アサーションとCIMDクライアントIDの関係を検証し、クライアントの公開済公開キーを使用してアサーションを検証します。

次の抜粋は、private_key_jwt認証に使用されるメタデータを示しています。完全なCIMDメタデータ・ドキュメントには、「クライアント・メタデータ要件」にリストされているすべてのフィールドも含める必要があります。

{
  "client_id": "https://client.example.com/oauth/client-metadata.json",
  "client_name": "Example Confidential Client",
  "grant_types": [
    "client_credentials"
  ],
  "token_endpoint_auth_method": "private_key_jwt",
  "jwks_uri": "https://client.example.com/.well-known/jwks.json"
}

メタデータのclient_id値は、クライアントがOAuth client_idとして使用するメタデータ・ドキュメントURLと一致する必要があります。

ドメイン間クライアントの採用

CIMDを使用すると、クライアント・パブリッシャは、すべてのドメインに個別の永続クライアント登録を作成せずに、同じOAuthクライアントを複数のアイデンティティ・ドメインで使用できるようになります。

クライアントは、安定したHTTPS URLで単一のメタデータ・ドキュメントを公開します。参加している各アイデンティティ・ドメインは、そのクライアントを信頼するかどうかを個別に決定できます。

アイデンティティ・ドメインごとに、次のステップを実行します。

  1. 管理者は、ドメインのCIMDサポートを有効にします。
  2. 管理者は、クライアントのメタデータの場所を信頼できるものとして構成します。
  3. クライアントは、client_idと同じHTTPSメタデータURLを使用します。
  4. アイデンティティ・ドメインは、クライアント・メタデータを取得および検証します。
  5. 保護された各リソースは、アクセスが必要な場合にCIMDクライアントを個別に認可します。

たとえば、同じクライアント識別子を複数のアイデンティティ・ドメインで使用できます。

https://client.example.com/oauth/client-metadata.json

あるアイデンティティ・ドメインの構成では、別のアイデンティティ・ドメインへの信頼は自動的に確立されません。各ドメイン管理者は、クライアントが信頼できるかどうかを制御し、各リソース・アプリケーションは、そのクライアントが保護されたリソースにアクセスできるかどうかを制御します。

主要な概念

次の用語では、CIMDフローで使用されるアイデンティティ、OAuthおよびセキュリティの概念について説明します。

  • IAM: Identity and Access Management。

  • IDCS: Oracle Identity Cloud Service。

  • MCP: AIアプリケーションが外部ツール、データ・ソース、サービスに接続する方法を標準化するオープン・プロトコル。このドキュメントでは、Model Context Protocol (MCP)クライアントがOAuthを使用して、保護されたMCPリソースにアクセスします。

  • IDCS/IAMドメイン: OAuthおよびアイデンティティ・サービスを提供するOracle Identity Cloud ServiceまたはOCI IAMアイデンティティ・ドメイン。

  • CIMD: クライアントIDメタデータ・ドキュメント。クライアントがメタデータ・ドキュメントのHTTPS URLをOAuth client_idとして使用する標準整列モデル。

  • メタデータ・ドキュメント: 必要なクライアント・メタデータ・フィールド(client_id、client_name、redirect_uris、grant_types、response_typesおよびtoken_endpoint_auth_method)を宣言するパブリッシャがホストするJSONドキュメント。

  • CIMDクライアント: 認可、同意、トークン、監査および認可処理のために検証されたCIMDドキュメントから作成された、存続期間の短いIAMドメイン・スコープのクライアント・アイデンティティです。

  • 信頼できるメタデータ・オリジン: IDCS/IAMがCIMDコンテンツをフェッチする前に、IAMドメインによって明示的に信頼されているメタデータURLオリジン。

  • PKCE: コード交換用のプルーフ・キー。パブリックCIMD承認コード要求に必要です。

  • JWKS: JSON Webキー・セット。CIMDクライアントがprivate_key_jwtを使用している場合に公開キーを公開するために使用されます。

  • SSRF: サーバー側のリクエスト・フォージェリ。CIMDメタデータおよびキーの取得では、SSRF対応URL、DNS、リダイレクト、タイムアウト、プロキシおよびペイロード・サイズの制御を適用する必要があります。

クライアントIDメタデータ文書モデル

CIMDを使用すると、OAuthクライアントは、URLをclient_idとして使用して認可サーバーに自身を識別できます。URLは、クライアント・メタデータを含むJSONドキュメントを指します。

クライアントは、認可サーバーに永続的なクライアント登録を格納するように要求するのではなく、メタデータをホストします。MCPおよびエージェントAIワークロードの場合、アイデンティティ・ドメインを持つIAMは、ドキュメント・ソース、メタデータ、リダイレクトURI、および保護されたリソースにアクセスするためのクライアントの認可を検証します。

クライアント・メタデータの要件

CIMDメタデータ・ドキュメントには、次の必須フィールドを含める必要があります。

  • client_id
  • client_name
  • redirect_uris
  • grant_types
  • response_types
  • token_endpoint_auth_method

メタデータ・ドキュメントのclient_id値は、クライアントがOAuth client_idとして使用するHTTPSメタデータ・ドキュメントURLと完全に一致する必要があります。

CIMDクライアントの場合、サポートされているtoken_endpoint_auth_method値はnoneおよびprivate_key_jwtです。

  • none: このメソッドは、認可コード・フローを使用するパブリック・クライアントに使用します。認可コード・フローにはPKCEが必要です。
  • private_key_jwt: このメソッドは、認証された機密クライアントに使用します。メタデータ・ドキュメントには、クライアント・アサーションの検証に使用される非対称公開キー情報を提供する有効なjwks_uriが含まれている必要があります。

クライアント資格証明の付与は、private_key_jwtを使用する認証済CIMDクライアントでサポートされています。未認証のクライアント資格証明リクエストはサポートされていません。

MCPクライアント開始承認

MCPクライアントによって開始される認可中、/.well-known/oauth-authorization-serverエンドポイントは、クライアントが認可サーバー・メタデータを検出し、サーバーがCIMDをサポートするかどうかを判断するのに役立ちます。

  1. 保護されたリソースをリクエストします。 MCPクライアントは、MCPサーバーから保護されたリソースを要求します。

  2. 承認要件を受け取ります。 リクエストに有効な資格証明が含まれていない場合、MCPサーバーは401 Unauthorizedを返します。WWW-Authenticateヘッダーには、サーバーのProtected Resource Metadata (PRM)ドキュメントを指すresource_metadataパラメータが含まれています。

    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Bearer resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource"
  3. PRMドキュメントを取得します。 クライアントは、resource_metadataパラメータのURLからPRMドキュメントをフェッチします。ドキュメントは、認可サーバーを識別します。

    {
      "resource": "https://mcp.example.com",
      "authorization_servers": ["https://auth.example.com"]
    }
  4. 認可サーバーのメタデータを検出します。 クライアントは、authorization_servers値を使用して認可サーバーを検索し、そのメタデータ・エンドポイントをリクエストします。

    https://auth.example.com/.well-known/oauth-authorization-server
  5. 認可サーバー・メタデータを取得します。 メタデータは、認可エンドポイント、トークン・エンドポイントおよびCIMDサポートを記述します。

    {
      "issuer": "https://auth.example.com",
      "authorization_endpoint": "https://auth.example.com/authorize",
      "token_endpoint": "https://auth.example.com/token",
      "client_id_metadata_document_supported": true
    }
  6. クライアント登録方法を決定します。 client_id_metadata_document_supportedがtrueの場合、クライアントはCIMDを使用できます。

  7. CIMDに進みます。 クライアントは、ホストされているメタデータ・ドキュメントのURLをclient_idとして使用します。

サポートされているOAuthフロー

アイデンティティ・ドメインを使用するIAMでは、CIMDクライアントに対して次のOAuthフローがサポートされます:

  • リフレッシュ・トークンのサポートなど、パブリック・クライアントに対するPKCEを使用した認可コード・フロー。
  • クライアント資格証明は、キー認証されたCIMDクライアントに対してprivate_key_jwtで付与されます。

認可サーバー検出フィールドgrant_types_supportedおよびresponse_types_supportedは、認可サーバーの一般的なOAuth機能を示します。これらは、ここにリストされているCIMD固有のフロー制限をオーバーライドしません。

CIMD制約

CIMDフローには、次の制約があります。

  • 認証: クライアントがIAM認可サーバーを介してサインインする前に、各CIMDメタデータの場所をアイデンティティ・ドメイン許可リストを使用してIAMに追加します。
  • 認可: クライアントが顧客定義のリソース・アプリケーションにアクセスする前に、各CIMDクライアントをOAuthリソース・アプリケーション許可リストに追加します。
  • キャッシュ: アイデンティティ・ドメインを持つIAMは、Cache-Controlなどの標準のHTTPキャッシュ・セマンティクスに従ってCIMDドキュメントをキャッシュし、メタデータを再利用または取得するタイミングを決定します。

CIMD要求処理

アイデンティティ・ドメインを持つIAMは、認可およびトークン処理中にCIMDメタデータを検証します。検証には、ドメイン信頼チェック、URLバインディング、セキュアなメタデータとキー取得、レスポンス検証、キャッシュ制御、サーバー側のリクエスト・フォージェリ(SSRF)に対する保護が含まれます。

ログイン要求処理

アイデンティティ・ドメインを持つIAMは、次のステージでCIMD認可リクエストを処理します:

  1. 承認要求を受信します。 クライアントは、CIMD URLを含み、残りの認可パラメータを含むclient_idを送信します。

  2. 取得前にドメインの信頼を確認してください。 アイデンティティ・ドメインを持つIAMは、メタデータ・ドキュメントを取得する前に、アイデンティティ・ドメインの信頼構成に対してCIMD識別子をチェックします。メタデータ・ソースが信頼されていない場合、リモート取得の前にリクエストは拒否されます。

  3. CIMD文書を検証および取得します。 アイデンティティ・ドメインを持つIAMは、HTTPSメタデータURLを検証し、保護されたネットワーク・アクセスを使用してJSONドキュメントを取得して、URLバインディングを検証し、CIMD取得のセキュリティに関する考慮事項で説明されている取得セキュリティ制御を適用します。

  4. パブリッククライアントにPKCEを適用します。 パブリック・クライアントの場合、アイデンティティ・ドメインを使用するIAMには、認可コード・フローにPKCEが必要です。

トークン・リクエスト処理

クライアントがgrant_type = authorization_codeを使用してトークン・エンドポイントをコールすると、アイデンティティ・ドメインを持つIAMはリクエストを次のように処理します:

  1. client_idを抽出します。 アイデンティティ・ドメインを持つIAMは、トークン・リクエストからCIMD URLを識別します。

  2. CIMDドキュメントを取得または再利用します。 アイデンティティ・ドメインを含むIAMは、メタデータを安全に取得するか、該当するキャッシュ・ポリシーに従って検証済のキャッシュ・メタデータを再利用します。サービスがprivate_key_jwt認証のためにJWKSを取得する場合、同じネットワークおよびレスポンス保護が適用されます。

  3. private_key_jwtクライアントを認証します。 token_endpoint_auth_methodをprivate_key_jwtとして指定するCIMDドキュメントの場合、アイデンティティ・ドメインを持つIAMはクライアント・アサーションを検証します。

    • JSON Webトークン(JWT)のissクレームがclient_id URLと一致することを確認します。
    • CIMDドキュメントでjwks_uri値を見つけます。
    • JWKSを取得または再利用します。
    • JWKSからのキーを使用して、client_assertion JWTを確認します。
    • 必要なすべての署名および要求が検証に合格した後にのみトークンを発行します。
  4. パブリッククライアントを処理します。 認可コード・フローを使用するパブリック・クライアントの場合、アイデンティティ・ドメインを含むIAMは既存の認可コード・トークン処理を適用します。

CIMD取得のセキュリティに関する考慮事項

アイデンティティ・ドメインを含むIAMでは、CIMDメタデータの取得時およびprivate_key_jwtに必要な場合、JWKSキー情報に次の制御が適用されます。

  • 取得前に信頼します。 メタデータ・ソースは、リモート・メタデータを取得する前にアイデンティティ・ドメインの信頼チェックに合格する必要があります。信頼できないCIMD識別子は、サービスがメタデータを取得する前に拒否されます。

  • HTTPSとURLの検証。 CIMD client_idは、有効なHTTPSメタデータURLである必要があり、取得前にURL安全性検証を渡す必要があります。

  • DNSおよびネットワーク宛先の保護。 DNSおよびネットワーク・アドレス・チェックは、DNSのリバインドから保護し、安全でないネットワーク宛先からの取得を防止します。

  • リダイレクト保護。 リモート・メタデータおよびキー取得は、リダイレクトを自動的に追跡しないため、取得リクエストが安全でない宛先にリダイレクトされるのを防ぎます。

  • バインドされた取得。 メタデータおよびJWKSの取得がバインドされているため、リモート・ホストで無制限の待機が発生したり、無制限のレスポンス・コンテンツが返されることはありません。

  • 失敗した応答処理。 失敗、不正な形式、読取り不能、サイズ超過または信頼できないメタデータおよびJWKSレスポンスは拒否され、キャッシュされません。

  • バインドされたキャッシュ。 検証されたCIMDメタデータのみが再利用の対象となります。キャッシュは時間制限付きで、関連するHTTPキャッシュ・ディレクティブに従います。これには、キャッシュされたコンテンツの再検証または再使用を回避するためにサービスを必要とするディレクティブも含まれます。

CIMD検出の概要

MCPクライアントは、401 Unauthorizedレスポンスを受信してPRMドキュメントを取得した後、OAuth認可サーバー・メタデータをリクエストします。認可サーバーのメタデータは、CIMDがサポートされているかどうかを示します。

CIMDがサポートされている場合、クライアントはメタデータURLをclient_idとして使用します。アイデンティティ・ドメインを含むIAMは、認可またはトークン処理が完了する前に、メタデータの場所およびクライアント・メタデータを検証します。

アイデンティティ・ドメインのCIMDの構成

アイデンティティ・ドメインでIAMを構成して、アイデンティティ・ドメインのCIMDサポートを有効にし、クライアントにCIMDサポートを通知し、アイデンティティ・ドメインが信頼できるHTTPSクライアント・メタデータ・ソースを構成します。

開始する前に

ドメインでCIMDクライアントを処理するには、アイデンティティ・ドメインに対してCIMDサポートを有効にする必要があります。クライアントがIAM認可サーバーを介してサインインする前に、各CIMDクライアント・メタデータURIをアイデンティティ・ドメイン・ドメイン許可リストを持つIAMに追加します。

承認サーバー・メタデータ

アイデンティティ・ドメインでCIMDサポートが有効な場合、認可サーバー・メタデータは、client_id_metadata_document_supportedを値trueに含めてCIMDサポートを通知します。アイデンティティ・ドメインはこのプロパティを通知するのは、CIMDサポートが有効な場合のみです。

{
  "issuer": "https://identity.oraclecloud.com/",
  "authorization_endpoint": "https://<idcs-stripe-url>/oauth2/v1/authorize",
  "token_endpoint": "https://<idcs-stripe-url>/oauth2/v1/token",
  "token_endpoint_auth_methods_supported": [
    "client_secret_basic",
    "private_key_jwt",
    "client_secret_post",
    "none"
  ],
  "token_endpoint_auth_signing_alg_values_supported": ["RS256"],
  "jwks_uri": "https://<idcs-stripe-url>/admin/v1/SigningCert/jwk",
  "scopes_supported": [
    "openid",
    "profile",
    "offline_access",
    "email",
    "address",
    "phone",
    "groups",
    "get_groups",
    "approles",
    "get_approles"
  ],
  "response_types_supported": [
    "code",
    "token",
    "id_token",
    "code token",
    "code id_token",
    "token id_token",
    "code token id_token"
  ],
  "ui_locales_supported": ["en"],
  "revocation_endpoint": "https://<idcs-stripe-url>/oauth2/v1/revoke",
  "introspection_endpoint": "https://<idcs-stripe-url>/oauth2/v1/introspect",
  "code_challenge_methods_supported": ["S256"],
  "secure_authorization_endpoint": "https://<idcs-stripe-regional-url>/oauth2/v1/authorize",
  "secure_token_endpoint": "https://<idcs-stripe-regional-url>/oauth2/v1/token",
  "secure_userinfo_endpoint": "https://<idcs-stripe-regional-url>/oauth2/v1/userinfo",
  "secure_revocation_endpoint": "https://<idcs-stripe-regional-url>/oauth2/v1/revoke",
  "secure_introspection_endpoint": "https://<idcs-stripe-regional-url>/oauth2/v1/introspect",
  "secure_jwks_uri": "https://<idcs-stripe-regional-url>/admin/v1/SigningCert/jwk",
  "grant_types_supported": [
    "client_credentials",
    "password",
    "refresh_token",
    "authorization_code",
    "urn:ietf:params:oauth:grant-type:jwt-bearer",
    "tls_cert_auth"
  ],
  "userinfo_endpoint": "https://<idcs-stripe-url>/oauth2/v1/userinfo",
  "client_id_metadata_document_supported": true
}

この認可サーバー・メタデータの権限付与タイプ、レスポンス・タイプおよびトークン・エンドポイント認証方法の値は、アイデンティティ・ドメインの一般的なOAuth機能を記述します。CIMD固有の制限は上書きされません。CIMDクライアントの場合、「サポートされているOAuthフロー」および「クライアント・メタデータ要件」に記載されているOAuthフローおよび認証方法のみを使用します。

CIMDドメイン許可リストの構成

アイデンティティ・ドメインがCIMDに対して信頼できるHTTPSクライアント・メタデータURIを使用して、アイデンティティ・ドメイン・ドメイン許可リストを使用してIAMを構成します。例に示すように、domainUri値には完全なHTTPSメタデータ・ドキュメントURLを使用します。

CIMDメタデータ・ドキュメントを取得する前に、アイデンティティ・ドメインは、CIMD client_idがドメイン構成によって信頼されていることを確認します。クライアント識別子が信頼されていない場合、アイデンティティ・ドメインはメタデータ・ドキュメントを取得する前にCIMDリクエストを拒否します。

PATCH https://<idcs-stripe-url>/admin/v1/Settings/Settings
{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
    {
      "op": "add",
      "path": "allowedCimdDomains",
      "value": [
        {
          "domainUri": "https://client.example.com/oauth/client-metadata.json"
        },
        {
          "domainUri": "https://developer.example.net/oauth/client-metadata.json"
        }
      ]
    }
  ]
}

CIMDクライアントを許可するアプリケーションの構成

承認されたCIMDクライアントがアイデンティティ・ドメインを持つIAMを介してリソースにアクセスできるように、保護されたリソース・アプリケーションを構成します。リソース認可は、完全なHTTPS CIMDクライアント識別子(OAuth client_idとして使用されるクライアント・メタデータ・ドキュメントURL)に適用されます。

開始する前に

CIMDクライアントを保護されたリソース・アプリケーション許可リストに追加する前に、アイデンティティ・ドメイン・ドメイン許可リストを含むIAMにクライアント・メタデータの場所を追加します。

CIMDクライアントは、完全なHTTPS CIMDクライアント識別子がリソースに対して認可されている場合にのみ、顧客定義のOAuthリソース・アプリケーションにアクセスできます。CIMDクライアントは、内部IAM管理リソースをリクエストしたり、IAMロールを受信したりできません。

リソース・アプリケーション許可リストの構成

アイデンティティ・ドメインを持つIAMが保護するリソース・アプリケーションの場合、リソースにアクセスできる完全なHTTPS CIMDクライアント識別子ごとにCIMDクライアント許可リストを構成します。識別子は、OAuth client_idとして使用されるクライアント・メタデータ・ドキュメントURLです。

PATCH https://<idcs-stripe-url>/admin/v1/Apps/<app-guid>
{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
    {
      "op": "add",
      "path": "cimdClientsAllowlist",
      "value": [
        "https://client.example.com/oauth/client-metadata.json",
        "https://developer.example.net/oauth/client-metadata.json"
      ]
    }
  ]
}

リダイレクトURIの要件

CIMD認可リクエストでは、次の要件を満たすリダイレクトURIを使用する必要があります。

  • CIMD redirect_urisメタデータ内のすべてのリダイレクトURIを宣言します。
  • HTTPSリダイレクトURIの場合、リクエストされたリダイレクトURIは宣言されたURIと完全に一致する必要があります。
  • リダイレクトURIには、ユーザー情報、フラグメントまたはワイルドカードを含めることはできません。
  • HTTPリダイレクトURIは、認識されたループバック・ホストに対してのみサポートされます。
  • ループバック・リダイレクトURIの場合、ポートのみがredirect_urisで宣言されたURIと異なる場合があります。

たとえば、CIMDメタデータでhttp://localhost/callbackが宣言されている場合、リクエストではhttp://localhost:8000/callbackを使用できます。ポートはループバック・リダイレクトによって異なる場合がありますが、リダイレクトURIの残りは宣言されたURIと一致する必要があります。

CIMD認証とトークンの例

これらの例を使用して、CIMDクライアント・メタデータ、認可リクエスト、トークン・リクエストおよび代表的なトークン・クレームを理解します。

CIMDメタデータの例

次のサンプルは、PKCEで認可コード・フローを使用し、リフレッシュ・トークンをサポートするパブリックCIMDクライアントを示しています。

{
  "client_id": "https://client.example.com/oauth/client-metadata.json",
  "client_name": "Example MCP Client",
  "client_uri": "https://client.example.com",
  "redirect_uris": [
    "http://localhost/callback",
    "http://127.0.0.1/callback"
  ],
  "grant_types": [
    "authorization_code",
    "refresh_token"
  ],
  "response_types": [
    "code"
  ],
  "token_endpoint_auth_method": "none"
}

この例では、すべての必須CIMDメタデータ・フィールドが含まれています。token_endpoint_auth_methodはnoneであるため、パブリック・クライアントは認可コード・フローでPKCEを使用する必要があります。

アイデンティティ・ドメインがこのCIMDクライアントを信頼するように構成され、必要なリソース・アプリケーションがクライアントを認可した後、クライアントはOAuth認可フローでメタデータURLをclient_idとして使用できます。

認可リクエストの例

次のサンプル認可リクエストでは、CIMD URLをclient_idとして使用します。メタデータの例ではhttp://localhost/callbackを宣言しますが、このリクエストではhttp://localhost:8000/callbackを使用します。リクエスト・リダイレクトURIは、ポートのみが異なるため、ループバック・リダイレクトに対して有効です。

https://<idcs-stripe-url>/oauth2/v1/authorize?response_type=code&client_id=https%3A%2F%2Fclient.example.com%2Foauth%2Fclient-metadata.json&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcallback&scope=openid+offline_access&code_challenge=<pkce-code-challenge>&code_challenge_method=S256&state=<state-value>

トークン・リクエストの例

次のサンプルでは、認可コードをトークンと交換します。

curl --location 'https://<idcs-stripe-url>/oauth2/v1/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'code=<authorization-code>' \
  --data-urlencode 'grant_type=authorization_code' \
  --data-urlencode 'redirect_uri=http://localhost:8000/callback' \
  --data-urlencode 'client_id=https://client.example.com/oauth/client-metadata.json' \
  --data-urlencode 'code_verifier=<pkce-code-verifier>'

トークン・レスポンスの例

次のサンプルは、代表的なアクセストークン要求を示しています。ユーザー、テナント、ドメイン、リージョン、クライアントまたは環境を識別する値はプレースホルダを使用します。

{
  "sub": "<user-identifier>",
  "iss": "https://identity.oraclecloud.com/",
  "scope": "openid offline_access",
  "client_id": "https://client.example.com/oauth/client-metadata.json",
  "user_ocid": "ocid1.user.<realm>..<user-unique-id>",
  "client_tenantname": "idcs-<tenant-ocid>",
  "region_name": "<region-name>",
  "exp": <expiration-time>,
  "iat": <issued-at-time>,
  "client_guid": "<client-guid>",
  "client_name": "Example MCP Client",
  "aud": "https://<tenant-hostname>"
}

CIMDエラー

この表では、一般的な顧客対応クライアントIDメタデータ・ドキュメント(CIMD)エラー・シナリオ、想定される動作、およびそれらを解決するために必要な構成チェックについて説明します。

共通クライアントIDメタデータ・エラー・シナリオ
シナリオ 観察された動作 推奨チェック
パブリック・クライアントはPKCEパラメータを省略します。 400 invalid_request。必要なPKCEパラメータがありません。 S256を使用して、code_challengeおよびcode_challenge_methodを含めます。
メタデータclient_idは、認可リクエストclient_idとは異なります。 認可がクライアントIDバインディング・エラーで失敗します。 メタデータ・ドキュメントのclient_idが、リクエストで使用されているHTTPS URLと完全に一致していることを確認します。
CIMDドメインは許可リストに登録されていません。 信頼の検証中に認可が拒否されました。 メタデータ・ドキュメントのドメインをアイデンティティ・ドメイン許可リストに追加します。
メタデータURLはHTTPSチェックまたはネットワーク・セキュリティ・チェックに失敗します。 メタデータ・ドキュメントをフェッチできません。 パブリックHTTPSエンドポイントでドキュメントをホストすること。プライベートまたは内部IP宛先を使用しないでください。