Azure App ServiceのMicrosoft Entra認証設定|影響範囲と移行注意点を解説

Azure App Service や Azure Functions で Microsoft Entra 認証を使っている場合、今すぐ確認すべきポイントは「テナント種別」「アプリ登録」「発行者 URL」「許可されたトークン対象ユーザー」「認証と認可の分離」「シークレット管理」「Microsoft Graph 移行」です。特に、ログインできるかどうかだけで判断すると、意図しないテナントやクライアントアプリからのアクセスを許してしまう可能性があります。

本記事では、2026年5月20日時点で確認できる Microsoft Learn の公式情報をもとに、Azure App Service / Azure Functions で Microsoft Entra サインインを構成する際の変更点、影響範囲、管理者・開発者が確認すべき設定を整理します。なお、対象の Microsoft Learn ページの表示上の最終更新日は 2026年4月27日です。(Microsoft Learn)

目次

Microsoft Entra認証でまず確認すべき結論

Microsoft Entra 認証の設定は、単に「ログイン画面を出す」だけの機能ではありません。App Service Authentication、いわゆる Easy Auth を使うと、アプリ側で認証処理を大きく実装しなくてもサインインを構成できます。一方で、認証後に誰へアクセスを許可するか、どのトークンを受け入れるか、どのテナントを信頼するかは、アプリの用途に合わせて明確に決める必要があります。App Service の組み込み認証は、リクエストがアプリケーションコードへ到達する前に認証処理を行い、認証情報を HTTP ヘッダーとしてアプリへ渡します。(Microsoft Learn)

確認項目影響管理者・開発者が行うこと
テナント種別社内ユーザー向けか、外部顧客向けかで構成が変わるWorkforce configuration と External configuration を使い分ける
アプリ登録同意、権限、トークンの発行先に影響する自動作成か既存登録の利用かを決める
発行者 URL古い issuer のままだとベストプラクティスから外れるhttps://login.microsoftonline.com/<tenant-id>/v2.0 を確認する
Allowed token audiences受け入れるアクセストークンの aud を制限できるApp ID URI やカスタム URI を使う API で明示設定する
認可認証済みでもアクセス許可済みとは限らないロール、テナント、クレームをアプリ側または組み込みポリシーで検証する
シークレット有効期限切れや漏えいリスクがあるKey Vault 参照またはマネージド ID 利用を検討する
Microsoft Graph 移行Azure AD Graph 依存は移行対象graph.windows.net 参照や旧スコープを見直す

影響範囲はApp ServiceとAzure Functionsの認証設定

今回の公式情報の対象は、Azure App Service または Azure Functions の認証で Microsoft ID プラットフォーム、つまり Microsoft Entra を ID プロバイダーとして使う構成です。対象になるのは、社内向け Web アプリ、API、Functions、外部顧客向けアプリ、ネイティブクライアントやデーモンアプリから呼び出されるバックエンド API などです。(Microsoft Learn)

影響を受けやすいのは、次のような環境です。

  • App Service Authentication を有効にしている Web アプリ
  • Azure Functions で Microsoft Entra 認証を使っている API
  • 複数のデプロイスロットを使っている本番・ステージング環境
  • App Service の前段に Azure Front Door やリバースプロキシを置いている環境
  • 複数テナントのユーザーを受け入れる SaaS 型アプリ
  • ネイティブアプリ、SPA、バッチ、デーモンアプリから App Service API を呼び出す構成
  • 旧 Azure AD Graph に依存している既存アプリ

注意したいのは、認証設定の見直しが「すぐに全環境で障害を起こす変更」とは限らない点です。むしろ、現在動いている環境でも、設定が広すぎる、古い issuer を使っている、シークレット更新に依存している、Graph 移行が未完了といったリスクが残っている可能性があります。

テナント選択は「社内向け」か「外部顧客向け」かで決める

Microsoft Entra 認証を構成する最初の分岐は、アプリをどのテナントに登録するかです。公式手順では、従業員やビジネスゲスト向けなら Workforce configuration、コンシューマーやビジネス顧客向けなら External configuration を選ぶ流れになっています。(Microsoft Learn)

利用者の想定選ぶ構成実務上の判断基準
自社社員のみWorkforce configuration単一テナントで管理しやすい。社内業務アプリに向く
自社社員+取引先ゲストWorkforce configurationゲストユーザー管理や条件付きアクセスと合わせて設計する
一般消費者External configurationメール、ワンタイムパスコード、外部 ID プロバイダーなどの設計が必要
複数企業の顧客External configuration またはマルチテナント構成テナント検証と契約済み組織の判定が重要

失敗しやすいのは、社内向けアプリを「広く使えるように」とマルチテナントで作成してしまうケースです。マルチテナントにすると利用範囲は広がりますが、許可するテナントをアプリ側で検証しないと、想定外の組織からのアクセスを受け入れる設計になりかねません。

アプリ登録は自動作成でよい場合と既存登録を使う場合を分ける

App Service 認証では、アプリ登録を自動作成することも、管理者が事前に作成した既存のアプリ登録を使うこともできます。通常は自動作成で始めても問題ありませんが、権限管理やテナント構成の都合で既存登録を使うべきケースがあります。公式情報では、アプリ登録を作成する権限がない場合、アプリを含むテナントとは異なる Microsoft Entra テナントの登録を使う場合、政府機関向けクラウドで新規登録作成オプションが使えない場合などが、既存登録を使う代表例として示されています。(Microsoft Learn)

実務では、次のように判断すると分かりやすくなります。

状況推奨される選択注意点
小規模な社内 Web アプリを新規作成する新しいアプリ登録を自動作成後から権限や同意設定を確認する
Entra 管理者がアプリ登録を一元管理している既存登録を使用クライアント ID、シークレット、issuer を正確に入力する
外部テナントを使う既存登録または外部構成に合わせた登録アプリ本体の Azure サブスクリプションと ID 管理の責任分界を明確にする
本番・検証・ステージングを分ける環境ごとに別のアプリ登録権限や同意を環境間で共有しない

アプリ登録を1つにまとめると管理が楽に見えますが、運用では逆にトラブルの原因になります。検証環境で追加した権限が本番にも影響する、ステージングのリダイレクト URI が本番設定に混ざる、シークレット更新のタイミングが全環境に波及する、といった問題が起こりやすくなります。

発行者URLはv2.0エンドポイントへ更新する

既存の Microsoft Entra 認証設定で特に確認したいのが、発行者 URL です。公式情報では、発行者 URL は <authentication-endpoint>/<tenant-id>/v2.0 の形式で指定し、グローバル Azure の場合は https://login.microsoftonline.com/<tenant-id>/v2.0 を使う例が示されています。高速セットアップで ID プロバイダーを作成した場合、レガシーな https://sts.windows.net エンドポイントが設定されることがあり、現在の Microsoft Entra ID のベストプラクティスに合わせて login.microsoftonline.com/<tenant-id>/v2.0 へ更新するよう案内されています。(Microsoft Learn)

確認すべき場所は、Azure portal の App Service または Functions アプリの「認証」設定です。Microsoft ID プロバイダーを編集し、issuer が古い形式になっていないかを確認します。

よくあるミスは次の3つです。

ミス起きる問題修正方法
tenant-id が別テナントの IDサインイン後にトークン検証で失敗するアプリ登録のディレクトリ ID を確認する
sts.windows.net のままv2.0 前提の構成や Graph 移行と噛み合わないlogin.microsoftonline.com/<tenant-id>/v2.0 に更新する
リダイレクト URI が不足サインイン後にコールバックで失敗するhttps://<app-name>.azurewebsites.net/.auth/login/aad/callback 形式を登録する

本番環境で issuer を変更する場合は、いきなり本番だけを更新しないでください。ステージングスロットや検証環境で、通常ログイン、ログアウト、API 呼び出し、トークン更新、Graph 呼び出しまで確認してから展開するのが安全です。

Allowed token audiencesで受け入れるトークンを絞る

Allowed token audiences は、App Service または Azure Functions が受け入れるアクセストークンを aud クレームに基づいて制限する設定です。既定では、関連付けられたアプリ登録向けに発行されたトークンを受け入れますが、複数の API、複数のアプリケーション ID、カスタム Application ID URI を使う場合は、許可する audience を明示的に設定する必要があります。設定した場合、aud が許可リストに一致しないトークンは拒否されます。(Microsoft Learn)

例えば、バックエンド API を api://<application-client-id> で公開しているのに、App Service 側の Allowed token audiences にその値が入っていないと、クライアントアプリが正しくトークンを取得していても API 側で拒否される可能性があります。

管理者・開発者は、次の順で棚卸しすると効率的です。

確認順確認内容合格基準
1API を公開しているアプリ登録Application ID URI が把握できている
2API を呼ぶクライアントアプリどの resource / scope でトークンを要求しているか分かる
3App Service の Allowed token audiencesクライアントが取得するトークンの aud と一致している
4不要な audience使っていない古い URI が残っていない

Allowed token audiences は、設定すれば安全になるという単純なものではありません。必要な値を入れ忘れると正当なクライアントも拒否されます。一方で、古い値や広すぎる値を残すと、過去のクライアントや想定外の経路からのアクセスを許し続ける可能性があります。

Webサイトは302、APIは401を基本に設計する

認証設定では、未認証リクエストをどう扱うかを決めます。公式情報では、Web サイトには HTTP 302 Found redirect、API には HTTP 401 Unauthorized が推奨されています。また、アクセス制限では「認証を要求する」か「未認証アクセスを許可する」かを選択できます。(Microsoft Learn)

アプリの種類未認証時の推奨動作理由
ブラウザで利用する業務 Web アプリ302 リダイレクトユーザーを自然にサインイン画面へ誘導できる
REST API401 UnauthorizedAPI クライアントが認証エラーとして処理しやすい
一部ページだけ公開するサイト未認証アクセスを許可し、アプリ側で制御トップページやヘルスチェックを公開できる
存在自体を隠したい管理 API404 Not found も選択肢セキュリティ設計上の意図がある場合のみ使う

SPA や API で 302 を返すと、クライアントが HTML のログインページを受け取ってしまい、JSON として処理しようとして失敗することがあります。逆に、通常の Web サイトで 401 を返すと、利用者は「ログインすればよい」と分からず離脱しやすくなります。

トークンストアも確認対象です。公式情報では Token store が推奨されており、アプリケーションのトークンを収集、保存、更新できます。ただし、アプリ側でトークンを使わない場合やパフォーマンス最適化が必要な場合は、後から無効化する選択肢もあります。(Microsoft Learn)

認証と認可を混同しない

App Service Authentication を有効にすると、サインイン済みかどうかはプラットフォーム側で判定できます。しかし、それだけで「誰が何にアクセスできるか」まで完成するわけではありません。公式情報でも、App Service 認証は既定では認証を扱い、認可は別のステップだと説明されています。さらに、作成されたアプリ登録では既定でテナント内のすべてのユーザーがアプリにアクセスできるため、必要に応じて追加の認可判断が必要です。(Microsoft Learn)

特にマルチテナントアプリでは注意が必要です。公式情報では、App Service 認証をマルチテナントシナリオで構成した場合、要求がどのテナントから来たかを検証しないため、アプリ側で issuer と tenant ID を検証する必要があると説明されています。(Microsoft Learn)

アプリコードで認可を行う場合、App Service 認証が挿入する x-ms-client-principal ヘッダーや、x-ms-token-aad-access-token ヘッダーを利用できます。ただし、クレーム名はマッピングされることがあるため、トークン内の tid がそのまま tid として見えるとは限りません。公式情報では、tid が http://schemas.microsoft.com/identity/claims/tenantid にマップされる例が示されています。(Microsoft Learn)

組み込み認可ポリシーを使う場合の注意点

App Service 認証には、特定のクライアントアプリ、特定のプリンシパル、特定のテナントに絞るための組み込みチェックもあります。ただし、公式情報では、これらの組み込みチェックの構成は現時点で Azure Resource Manager テンプレートまたは REST API を使う必要があるとされています。(Microsoft Learn)

代表的な設定は次のとおりです。

設定目的注意点
allowedApplications特定のクライアントアプリから取得されたトークンのみ許可appid または azp クレームを評価する
allowedPrincipals.identities特定のユーザーまたはアプリの Object ID のみ許可ID 一覧には合計文字数制限がある
WEBSITE_AUTH_AAD_ALLOWED_TENANTS最大10個のテナント ID に制限マルチテナント SaaS で有効
WEBSITE_AUTH_AAD_REQUIRE_CLIENT_SERVICE_PRINCIPALoid クレームを必須にするアプリケーション主体の検証に使う

これらのチェックに失敗したリクエストは HTTP 403 Forbidden になります。403 が出たときは、単なるログイン失敗ではなく、トークンは認証されたが認可チェックで落ちた可能性を疑ってください。

クライアントシークレットはスロット固定設定として扱う

App Service 認証で新しいアプリ登録を作成すると、クライアントシークレットは MICROSOFT_PROVIDER_AUTHENTICATION_SECRET というスロット固定のアプリケーション設定として保存されます。既存のアプリ登録を使う場合も、クライアントシークレットは推奨されており、シークレットが設定されていない場合は OAuth 2.0 の暗黙的な許可フローが使われますが、公式情報では推奨されていません。(Microsoft Learn)

スロット固定であることは重要です。認証設定は環境に紐づくため、本番とステージングで同じシークレットや同じアプリ登録を共有すると、スロットスワップ時に予期しない認証不整合が起きる可能性があります。App Service 認証の API バージョン管理に関する公式情報でも、V1 から V2 へ移行する際は、シークレットをスロット固定のアプリケーション設定へ移す必要があると説明されています。(Microsoft Learn)

確認時は、次の観点で棚卸しします。

確認項目良い状態危険な状態
シークレット保存先App Service のスロット固定設定、または Key Vault 参照平文を手順書やローカルファイルに保存
有効期限更新予定が管理されている期限切れ直前まで検知できない
環境分離本番・検証で別の登録とシークレット全環境で同一シークレット
権限アプリごとに必要最小限複数アプリで権限と同意を共有

Azure CLI で設定を確認する場合は、出力に機密情報が含まれる可能性を前提に扱ってください。公式情報でも、シークレット値は重要なセキュリティ資格情報であり、共有したりローカルに永続化したりしないよう注意されています。(Microsoft Learn)

az webapp auth show -g <resource-group> -n <app-name>

マネージドIDを使うとシークレット管理の負担を減らせる

公式情報では、クライアントシークレットの代わりにマネージド ID を使う構成も説明されています。シークレットの代わりに ID を使うと、シークレットの有効期限対応や漏えいリスクを減らせます。この方式では、ユーザー割り当てマネージド ID とフェデレーション ID 資格情報を利用し、クライアントシークレットの代わりにクライアントアサーションとして使います。ただし、この方式は Workforce configuration でのみ利用できるとされています。(Microsoft Learn)

移行の流れは、概ね次のようになります。

手順作業注意点
1ユーザー割り当てマネージド ID を作成する使い回し前提で作らない
2App Service または Functions に割り当てる対象アプリ以外へ不要に割り当てない
3Object ID と Client ID を控える後続手順で使い分ける
4アプリ登録にフェデレーション ID 資格情報を構成するアプリコード更新手順は不要な場合がある
5OVERRIDE_USE_MI_FIC_ASSERTION_CLIENTID を追加する値はマネージド ID の Client ID。アプリ登録の Client ID ではない
6Client secret setting name を上記設定名に変更するスロット固定にする
7サインイン動作を検証し、既存シークレットを削除する検証前に削除しない

特に間違えやすいのが、OVERRIDE_USE_MI_FIC_ASSERTION_CLIENTID にアプリ登録のクライアント ID を入れてしまうケースです。公式手順では、ここに入れるのはマネージド ID の Client ID であり、アプリ登録の Client ID ではないと明記されています。(Microsoft Learn)

クライアントアプリからAPIを呼ぶ場合は追加設定が必要

App Service や Functions を単にユーザーサインイン付きの Web アプリとして使うだけなら、クライアントアプリ登録の設定は不要な場合があります。一方、ネイティブアプリやデーモンアプリから App Service の API を呼び出す場合は、クライアント側のアプリ登録と API 権限の設計が必要です。公式情報では、ネイティブクライアントはサインインユーザーの代わりに API へアクセスでき、デーモンアプリはユーザーではなくアプリ自身の ID でトークンを取得できると説明されています。(Microsoft Learn)

クライアント種別主な用途必要な確認
ネイティブクライアントデスクトップ、モバイルアプリuser_impersonation の委任アクセス許可
デーモンアプリバッチ、ジョブ、サービス間通信クライアント資格情報フロー、アプリロール、管理者同意
SPAブラウザ上のフロントエンドAPI の audience、CORS、未認証時のレスポンス
サーバーサイド Web アプリ別の App Service API 呼び出しトークン取得方式とロール検証

デーモンアプリでは特に注意が必要です。公式情報では、クライアント資格情報を使う方式により、Microsoft Entra テナント内のすべてのクライアントアプリケーションがアクセストークンを要求してターゲットアプリへ認証できる可能性があるため、特定のクライアントだけを許可するには追加構成が必要だと説明されています。具体的には、保護対象のアプリ登録にアプリロールを定義し、クライアント側へアプリケーション権限を付与し、管理者の同意を与えます。ただし、App Service 認証は roles クレームの検証までは行わないため、期待するロールを持っているかはアプリコード側で確認する必要があります。(Microsoft Learn)

V1 API利用環境はV2移行とスロット設定を確認する

App Service 認証には管理 API の V1 と V2 があり、公式情報では Azure portal の認証エクスペリエンスには V2 が必要とされています。V1 を使っているアプリは移行できますが、シークレット構成をスロット固定のアプリケーション設定へ移す必要があります。また、V2 への移行は元に戻せず、一部の既存クライアントから認証・認可機能を管理できなくなる可能性があるため、事前確認なしに本番環境へ適用すべきではありません。(Microsoft Learn)

V1/V2 周りで確認すべきポイントは次のとおりです。

確認項目対応
Azure portal に Upgrade ボタンが表示されるかV1 モデルの可能性があるため、移行手順を確認する
シークレットがアプリ設定へ移っているかスロット固定設定として管理する
Microsoft Account プロバイダーを個別利用しているかMicrosoft ID プラットフォーム側へ移行できるか検討する
自動化スクリプトが /authsettings を使っているか/authsettingsV2 への移行影響を確認する
スロットスワップを行うか認証設定とシークレットが環境をまたいで混ざらないようにする

認証ミドルウェアのランタイムバージョンは、通常は最新を使います。公式情報では、まれに自動更新で問題が起きた場合に runtimeVersion で一時的に特定バージョンへピン留めできると説明されています。ただし、ピン留めは恒久対応ではなく、原因調査と修正までの一時措置として扱うべきです。(Microsoft Learn)

Azure AD Graph依存はMicrosoft Graphへ移行する

古いアプリでは、グループメンバーシップ確認やユーザー情報取得のために Azure AD Graph を使っている場合があります。公式情報では、古いアプリが Azure AD Graph に依存している可能性があり、Microsoft Graph へ移行する必要があると説明されています。App Service 認証側では、Microsoft Graph のアクセス許可をアプリ登録に追加したうえで、issuer に /v2.0 を含める、サインイン構成から Azure AD Graph のアクセス許可要求を削除する、https://graph.windows.net への参照を削除する、といった対応が必要です。(Microsoft Learn)

Microsoft Graph への移行では、次のサインインパラメーターが例として示されています。

scope=openid profile email https://graph.microsoft.com/.default

Microsoft Graph の公式移行情報では、Azure AD Graph は非推奨であり、2025年8月31日に extended access が終了し、fully retired と示されています。既存アプリでまだ graph.windows.net、Azure AD Graph 用スコープ、古い SDK、グループ確認の独自実装が残っている場合は、認証設定だけでなくアプリコードも含めて移行計画を立てる必要があります。(Microsoft Learn)

展開前に必ずテストすべきシナリオ

Microsoft Entra 認証の設定変更は、ログイン画面が表示されるかどうかだけで完了判定しないでください。展開前には、最低でも次のテストを行います。

テスト期待結果
未認証ユーザーで Web にアクセスWeb アプリなら 302 でサインインへ誘導される
未認証クライアントで API にアクセスAPI なら 401 が返る
許可されたユーザーでログインアプリ画面または API に正常アクセスできる
許可されていないユーザーでログイン認証後でもアクセスが拒否される
許可されたテナントからアクセスtid または issuer 検証を通過する
許可されていないテナントからアクセスアプリ側または組み込みポリシーで拒否される
正しい audience のトークンで API 呼び出し成功する
古い audience のトークンで API 呼び出し拒否される
デーモンアプリで API 呼び出し必要なアプリロールがある場合だけ成功する
ステージングから本番へスワップ認証シークレットやリダイレクト URI が混在しない

障害時の切り分けでは、まず HTTP ステータスを見ます。302 はリダイレクト、401 は未認証、403 は認可チェック失敗の可能性が高い状態です。次に、App Service の認証ログ、アプリケーションログ、トークンの aud、iss、tid、oid、roles を確認します。

管理者と開発者の確認チェックリスト

最後に、実務でそのまま使える確認項目を整理します。

担当確認すること完了基準
Entra 管理者アプリ登録の所有者、権限、同意不要な権限がなく、所有者が明確
Azure 管理者App Service の認証設定ID プロバイダー、issuer、未認証時動作が用途に合っている
開発者アプリコードの認可処理ロール、テナント、ユーザー属性を必要に応じて検証している
開発者API の audienceクライアントが取得するトークンの aud と一致している
運用担当シークレット期限更新手順と期限監視がある
運用担当マネージド ID 移行可否Workforce configuration で利用可能か確認済み
全員Graph 移行graph.windows.net や Azure AD Graph 依存が残っていない
全員環境分離本番、検証、スロットでアプリ登録と権限を共有していない

Microsoft Entra 認証の見直しでは、まず現在の App Service 認証設定を棚卸しし、次に issuer、Allowed token audiences、テナント制限、クライアントシークレット、Graph 依存を確認します。そのうえで、ステージング環境でログイン、API 呼び出し、許可・拒否パターンをテストし、本番へ展開してください。

認証は「ログインできる」だけでは不十分です。誰が、どのテナントから、どのクライアントアプリを経由して、どの API にアクセスできるのかを明確にすることが、Azure App Service と Microsoft Entra 認証を安全に運用するための最短ルートです。

この記事を書いた人

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

コメント

コメントする

目次