Microsoft Entra ID(Azure AD)はOIDC Dynamic Client Registration(DCR)に対応?未対応の根拠と代替案(Microsoft Graph自動化)

Microsoft Entra ID(旧 Azure AD)で OpenID Connect を使う際、「Dynamic Client Registration(動的クライアント登録 / DCR)は使えるのか?」は、マルチテナントSaaSやMCP連携の文脈で特に重要になります。本記事では“対応の有無”を根拠付きで整理し、現場で成立する代替設計まで具体的にまとめます。

目次

結論:Microsoft Entra ID(旧 Azure AD)は OIDC の Dynamic Client Registration(DCR)をサポートしていない

結論から言うと、Microsoft Entra ID(旧 Azure AD)は OpenID Connect の Dynamic Client Registration(動的クライアント登録 / DCR)をネイティブにサポートしていません。

Microsoft Learn(Microsoft Q&A)でも「Azure AD does not support OpenID Connect Dynamic Client registration」と明確に回答されており、同スレッドの後続質問でも「現時点では機能がなく、ロードマップにも“今のところ”入っていない」とされています。

さらに、Microsoft の公式ドキュメント(App Service の MCP 認可ガイド)でも「多くのプロバイダーは DCR をサポートしておらず、Microsoft Entra ID もその一つ」と明記されています。

「将来的に対応予定はある?」に対する現実的な読み方

Microsoft Learn の Q&A(2025年8月の回答)では、DCR について「現時点で機能はなく、ロードマップにも今は入っていない」とされています。つまり、“近い将来に提供される”と断言できる根拠は見当たりません。

一方で、Microsoft のロードマップは変動し得るため、要件として DCR が外せない場合は、Microsoft が案内しているフィードバック窓口へ要望を出しつつ、実装面では代替案で設計を成立させるのが現実的です。

Dynamic Client Registration(DCR)とは何か:何が“動的”で、何が嬉しいのか

OpenID Connect の Dynamic Client Registration は、アプリ(Relying Party / Client)が IdP(OpenID Provider / Authorization Server)に対してプログラム的にクライアント登録を行い、client_id(必要に応じて client_secret 等)を取得できる仕組みです。

なぜこれが必要になるかというと、典型的には次のような要件があるからです。

  • あなたのアプリ(SaaS)が、顧客ごとに異なる IdP(Keycloak / Ping / Okta 等)を“セルフサービスで”追加できるようにしたい
  • 顧客の管理者が都度 IdP 管理画面でクライアント登録する運用を避けたい
  • 大量のクライアント(または大量の組み合わせ)を前提にし、手動登録がスケールしない

DCR に登場する用語(ざっくり把握)

用語役割(何をするもの?)実務で気にする点
Client Registration Endpointクライアント登録を受け付けるエンドポイントこれが無い IdP では DCR が成立しない
Initial Access Token登録エンドポイント呼び出しに必要な初期トークン(任意)匿名登録を許さない運用が一般的(特に企業向け)
Client Metadataredirect_uri / grant_types 等、登録したい設定情報redirect_uri の管理が最重要(セキュリティ)

対応可否の見分け方:OIDC の「.well-known」を見る

IdP が OIDC DCR に対応しているかは、まず OIDC Discovery(/.well-known/openid-configuration) を確認するのが定石です。DCR 対応の IdP では、しばしば registration_endpoint がメタデータに載ります(実装方針は IdP ごとに異なります)。

Microsoft Entra ID の .well-known を見ると「registration_endpoint」が無い

Microsoft Entra ID の OIDC メタデータ(例:common テナント)には、token_endpoint や authorization_endpoint などは掲載されていますが、registration_endpoint は含まれていません。

以下は読みやすさのために抜粋したイメージです。

{
  "authorization_endpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
  "token_endpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
  "jwks_uri": "https://login.microsoftonline.com/common/discovery/v2.0/keys",
  ...
  // registration_endpoint は見当たらない
}

なぜ Entra ID は DCR を提供していないのか(設計思想と運用の都合)

公式回答は「未対応」という事実に尽きますが、実務観点では次の事情が大きいと考えると理解しやすいです(これは設計上の背景説明であり、Microsoft が明文化した理由そのものではありません)。

  • クライアント登録=ディレクトリ資産の作成であり、企業テナントではガバナンス対象になりやすい
  • redirect_uri の管理が崩れると、OAuth/OIDC 全体の安全性が下がる(登録を誰でもできる形は採りにくい)
  • Entra では「アプリ登録(App registrations)」や「サービスプリンシパル」が管理プレーンの概念として確立しており、DCR のような“ランタイムの登録”を標準化していない

実際、Entra ID ではアプリ登録を誰が作れるかは重要な管理項目で、「既定ではユーザーがアプリ登録できるが、制限できる」とドキュメントにも記載されています。つまり、“クライアント登録は管理の領域”という色が濃いです。

よくある要件:アプリ上から IdP を追加できるようにしたい(BYO IdP / マルチIdP)

質問にあるユースケースは、ざっくり言うと以下のどれかに分類できます。

分類例IdP 側で必要になるもの
顧客ごとに IdP が違う顧客Aは Entra、顧客Bは Keycloak、顧客Cは Ping原則として“顧客ごと”に client_id/secret と redirect_uri の登録が必要
同一顧客内で複数 IdP を許可同一テナントで複数のSSO方式を併用構成管理が複雑化(運用設計が勝負)
エコシステム連携で DCR が期待されるMCP など「クライアントの組み合わせが爆発する」世界DCR があれば楽だが、Entra では静的 client_id 前提になりがち

代替案の全体像:Entra ID 前提なら「DCR なしで成立するオンボーディング」に寄せる

Entra ID に “標準DCRエンドポイントが無い” 前提では、設計として現実的な落としどころは大きく3つです。

代替案一言で向いているケース注意点
事前登録(手動)顧客管理者が Entra 管理画面でアプリ登録顧客数が少〜中、ガバナンス重視オンボーディングのUXが重要(手順が長いと離脱する)
Graph で登録自動化(擬似DCR)あなたの仕組みが Graph API で “アプリ登録を作る”顧客数が多い、手動が耐えない管理者同意・権限設計・監査が必須
DCR 対応 IdP を別に用意要件を満たす IdP へ寄せる / ブローカーを挟むDCR が仕様上どうしても必須構成が増える(運用/コスト/責任分界が変わる)

代替案 1:事前登録(手動)を“プロダクトの機能”として設計する

「顧客管理者が Entra ID 側でアプリ登録 → client_id/secret をあなたのアプリに入力」という形は、Entra 環境では最も王道です。ポイントは、手動作業を“運用”で片付けず、オンボーディング体験として設計することです。

手動オンボーディングで最低限そろえる情報

あなたのアプリが提示するもの顧客が Entra で設定するもの顧客があなたのアプリへ入力するもの
リダイレクトURI(例:本番/検証)Redirect URI(Web/SPA/ネイティブに合わせる)Client ID
必要スコープ(例:openid profile email offline_access など)API Permissions / スコープClient Secret または証明書
ログアウト後遷移先(必要なら)Front-channel logout / Redirect URI(必要に応じて)Tenant ID(またはドメイン)

“入力ミス”を減らすための UX アイデア(実務で効く)

  • コピー&ペースト前提の値を、あなたの管理画面で明確に提示する(Redirect URI、必要スコープ、許可されたアカウント種別など)
  • 入力後に、あなたのアプリ側で OIDC メタデータを取得して疎通チェック(issuer / jwks_uri / token_endpoint を検証)
  • Tenant ID の指定ミスを防ぐため、サインイン後の id_token の iss / tid で整合性を自動判定してアラート表示

代替案 2:Microsoft Graph でアプリ登録を自動化する(標準DCRではないが“体験”は近づけられる)

Entra ID に DCR エンドポイントが無くても、Microsoft Graph を使えばアプリ登録(Application オブジェクト)をプログラムで作成できます。これにより、あなたのサービス内に「IdP 登録ボタン」を用意し、裏側で自動登録する“擬似DCR”的な体験を実現できます。

Graph 自動化が成立する前提

  • 顧客テナントに対して、あなたの自動化コンポーネントが Graph API を呼べること(認可が必要)
  • アプリ登録を作成・変更できる権限(例:Application.ReadWrite.All など)を、顧客側の管理者が許可すること
  • 監査・ガバナンス(誰がいつ作ったか、何を作ったか)を顧客が受け入れられること

ここが “標準DCR” と決定的に違う点で、Graph による自動化は管理プレーン操作です。匿名のクライアントが勝手に登録できる世界とは、思想が別物です。

Graph でやること(代表例)

やりたいことGraph の代表的な操作補足
アプリ登録(Application)を作るPOST /applicationsdisplayName は必須
クライアントシークレットを発行するPOST /applications/{id}/addPasswordシークレットは応答で一度だけ返る運用が多い
サービスプリンシパル(Enterprise Application)を作るPOST /servicePrincipalsアプリ登録と別物なので注意
必要な API 権限を要求するrequiredResourceAccess を更新“要求”と“管理者同意”は別工程

Graph 自動化を“安全に”運用するためのチェックリスト

  • 最小権限:本当に必要な Graph 権限だけを要求する(過剰権限は導入拒否されやすい)
  • 作成したアプリの所有者:顧客側の管理者/運用アカウントを owner に設定し、あなたが永続的に握り続けない
  • 秘密情報の取り扱い:client_secret をあなたのDBに保存する場合、暗号化・アクセス制御・ローテーション計画を用意
  • 監査ログ対応:どのタイミングでどのオブジェクトを作ったかを、顧客が追える形にする(運用説明が必須)
  • テナント設定差:顧客によって「アプリ登録を作れるユーザー/アプリ」が制限されている場合がある

代替案 3:DCR が仕様要件なら、IdP を分ける/ブローカーを挟む

もし DCR が「あると便利」ではなく“無いと仕様が成立しない”レベルで固定要件なら、選択肢はシンプルになります。

  • DCR を提供する IdP(例:Keycloak など)に寄せる
  • あなたのシステム側で IdP ブローカー(中継)を用意し、そこで DCR を実装する
  • Entra は“ユーザー認証の上流”として利用しつつ、クライアント登録の受け皿は別コンポーネントにする

実際に、MCP の文脈でも「Entra そのままでは DCR を満たせないので、プロキシ的な仕組みで吸収する」という設計の話が出てきます。Entra を捨てずに要件を満たす“折衷案”としては有効ですが、責任分界とセキュリティ設計の難易度は上がります。

判断表:あなたの要件ならどれを選ぶべきか

優先事項おすすめ理由
ガバナンス最優先(顧客の統制が強い)事前登録(手動)管理者が意図して登録し、監査も分かりやすい
顧客数が多く、手動オンボードが破綻するGraph 自動化(擬似DCR)オンボードの工数を削減できる。ただし権限と監査が必須
“誰でも任意の組み合わせ”が前提(登録が爆発する)DCR 対応 IdP / ブローカー標準DCRが無いとスケールしない世界観
Entra を使いたいが、UXも捨てたくない手動+ウィザード強化顧客の管理者操作は残るが、迷わない導線で離脱を減らせる

「DCR が無い」前提で失敗しがちなポイント

redirect_uri を増やし過ぎる

DCR を想定している設計だと、環境や顧客ごとに redirect_uri を動的に増やしたくなります。しかし Entra のアプリ登録では、redirect_uri の管理はセキュリティに直結します。“登録が増え続ける” 仕組みはレビュー対象になりやすいため、可能ならパターンを固定して設計するのが安全です。

同意(consent)を見落とす

Entra の世界では、アプリが要求する権限に対してユーザーまたは管理者が同意する必要があります。MCP のガイドでも、クライアントが同意プロンプトを出せないケースでは「事前承認(preauthorization)」が必要になり得る、と説明されています。SSO の“最後の詰め”でハマりやすいので、早めに設計に織り込んでください。

「DCR=勝手に登録できる」と誤解する

DCR の仕様上、匿名登録を許す実装もありますが、企業向け IdP では一般に難しいです。Entra が DCR を提供しない背景には、まさにこの “誰が登録できるか” のガバナンスが絡みます。Entra の運用では、アプリ登録権限を制御すること自体が重要テーマになっています。

すぐ使える実務テンプレ:Entra を IdP として登録させるときの「案内文」例

最後に、あなたのプロダクト内のオンボーディング画面に貼れる形で、案内文の粒度を例示します(文章はそのまま使うのではなく、あなたの実装に合わせて調整してください)。

  • 登録方式:Microsoft Entra ID(旧 Azure AD)の「アプリ登録」でクライアントを作成します。
  • 必要な値:Client ID、Tenant ID、Client Secret(または証明書)
  • Redirect URI:(あなたのサービスが提示するURIをここに明記)
  • スコープ:openid / profile / email(必要に応じて offline_access など)
  • 確認:登録後、当画面で「接続テスト」を実行し、issuer / jwks / token エンドポイントの疎通を検証します。

まとめ:Entra ID で DCR は使えない。だからこそ「登録運用」を設計に組み込む

Microsoft Entra ID(旧 Azure AD)は、OIDC の Dynamic Client Registration(DCR)をサポートしていません。これは Q&A の公式回答、MCP 関連の Microsoft 公式ドキュメント、そして OIDC メタデータ上の事実(registration_endpoint が無い)からも確認できます。

一方で、要件を満たす方法はあります。Entra 前提なら、(1) 手動の事前登録を“プロダクト体験”として磨く、(2) Microsoft Graph で登録を自動化して擬似DCRに寄せる、(3) DCR 対応 IdP/ブローカーに責務を分離する、のいずれかが現実解です。あなたの顧客規模・ガバナンス要求・UX要件に合わせて、最初から「オンボーディングの設計」をプロジェクト範囲に入れて進めるのが成功の近道です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次