EasyAuth の組み込み認可ポリシーの仕組みと Claim 評価のタイミング
App Service 認証 (EasyAuth) の組み込み認可ポリシーの仕組みと、認可の評価タイミングについてご教示ください。 組み込み認可ポリシーを適切に設定できることを目的としています。
前提知識
最初に、公式ドキュメントなどから確認した仕組みの部分の理解を記載いたします。
ID プロバイダーを Microsoft として EasyAuth を設定する場合、「その他のチェック」の項目 (添付画像) により、3 つの組み込み認可ポリシーの設定を行うことができる認識です。 その他のチェックでは、クライアントアプリケーション、ID、テナントのそれぞれの要件を選択できますが、内部的には以下のプロパティ (環境変数) により定義され、括弧内に記載の着信トークンの Claim が評価されると理解しています。
- allowedApplications (appid, azp)
- allowedPrincipals.identities (oid)
- WEBSITE_AUTH_AAD_ALLOWED_TENANTS 環境変数 (tid)
App Service で EasyAuth が構成されている場合、以下の流れで処理が行われるものと思います。
- 認証されていないユーザーは /oauth2/v2.0/authorize へリダイレクト
- ユーザーサインイン
- アクセス許可の同意
- コールバック URL (.auth/login/aad/callback) へリダイレクトし、authorize エンドポイントから受け取った ID トークン、認可コード を POST
- EasyAuth ミドルウェアは ID トークンを検証
- EasyAuth ミドルウェアは認可コードをアクセストークンに引き換えてトークンストアに保存
- AppServiceAuthSession の Cookie をブラウザに返却
- Top ページ (azurewebsites.net) へリダイレクト
確認したいこと
3 つの組み込み認可ポリシーはどのタイミングで、どのトークンの Claim を検証しているのかを確認させて頂きたいです。こちらでの検証を踏まえた考察は以下のとおりです。
allowedApplications のポリシーは、"受信トークン (アクセス トークンである必要があります) の appid または azp クレームを評価します" と記載されているとおり、アクセストークンのみが評価されるはずです。
以下のチュートリアルにあるような User → App Service (frontend) → App Service (backend) の構成において、frontend の App Service にサインインするだけであれば、allowedApplications にデタラメな値を登録しても効果はありませんでした。このことからも、単なるサインイン処理では関係はないものと思います。
https://learn.microsoft.com/ja-jp/azure/app-service/tutorial-auth-aad
allowedApplications 以外の 2 項目については「着信トークン」のクレームを評価する旨の記載がありますが、ID トークンなのか、アクセストークンなのか読み取れませんでした。 チュートリアルの構成で検証してみた結果、allowedApplications 以外は frontend、backend どちらでも効果がありましたので、整理すると以下のようになるものと考えます。
- allowedApplications (appid, azp): アクセストークンのみを評価
- allowedPrincipals.identities (oid): ID トークン、アクセストークンを評価
- WEBSITE_AUTH_AAD_ALLOWED_TENANTS 環境変数 (tid): ID トークン、アクセストークンを評価
*ID トークンは、コールバック URL にアクセスしたタイミングで評価
*アクセストークンは、リソースサーバー (Backend API) を呼び出したタイミングで、リクエストヘッダー Bearer に付属のトークンを評価
参考 URL
https://learn.microsoft.com/ja-jp/entra/identity-platform/v2-protocols-oidc
https://learn.microsoft.com/ja-jp/entra/architecture/auth-oidc
https://learn.microsoft.com/ja-jp/azure/app-service/tutorial-auth-aad
以上、お手数をおかけしますが、ご教示いただけますと幸いです。