変更要約: AZ-204 第3章を Associate 級に深掘り(比較表・シナリオ・FAQ・ひっかけ+深掘り段落、図を日本語化)
3.1認証と認可(Entra ID・MSAL)
Microsoft Entra ID によるアプリ認証、MSAL を用いた OAuth2 トークン取得、アプリ登録とスコープ/ロール、API の保護といった認証・認可の実装を理解します。AZ-204 の「Azure セキュリティの実装」の出発点です。
アプリの認証は Microsoft Entra ID に委ね、MSAL(Microsoft Authentication Library)でOAuth2 トークンを取得します。トークンで API を安全に呼びます。
3.1.1トークン取得の流れ
ユーザーやアプリの認証・認可は Microsoft identity platform(Microsoft Entra ID)で行い、OAuth 2.0/OIDC でトークンを取得し Microsoft Graph を呼び出します。アプリ設定や機能フラグ(Feature Manager)は Azure App Configuration に集約し、機密値は Key Vault と併用します。
- アプリ登録:Entra ID にアプリを登録し、リダイレクト URI・スコープ・API アクセス許可を構成する。
- MSAL:対話型/サイレントでトークンを取得し、キャッシュ・更新を扱う。
- 委任 vs アプリ権限:ユーザーの代理(委任)か、アプリ自身(アプリ権限/クライアント資格情報フロー)かを使い分ける。
- API 保護:API はトークンの署名・対象・スコープ/ロールを検証してアクセスを認可する。
「トークン取得=MSAL」「ユーザー代理=委任権限、デーモン/バックグラウンド=アプリ権限(クライアント資格情報)」「API は token のスコープ/ロールを検証」 は AZ-204 で頻出です。SPA は認可コードフロー+PKCE が推奨です。
認証は Microsoft Entra ID に委ね、MSAL で OAuth2/OIDC トークンを取得します。まず アプリ登録(クライアント ID・リダイレクト URI・公開スコープ・API アクセス許可)を行い、用途でフローを選びます:Web/ネイティブは 認可コードフロー、SPA は 認可コードフロー+PKCE、ユーザー不在のデーモンは クライアント資格情報フロー(アプリ権限)、他 API を代理で呼ぶ場合は On-Behalf-Of。権限は「委任権限(サインインユーザーの代理・実効権限はユーザー∩アプリ)」と「アプリ権限(アプリ自身・管理者同意要)」を使い分けます。受け取る アクセストークン(API 呼び出し用)/ID トークン(認証情報)/更新トークン(再取得)を区別し、保護 API は署名・発行元・対象(audience)・有効期限・スコープ/ロールを検証して認可します。クライアントシークレットより 証明書/フェデレーション資格情報(ワークロード ID) が安全。App Service は Easy Auth でコードなしに認証を追加できます。判断軸は「トークン取得=MSAL」「ユーザー代理=委任」「デーモン=アプリ権限」「SPA=認可コード+PKCE」。
| シナリオ | フロー/権限 |
|---|---|
| Web/ネイティブでユーザーサインイン | 認可コードフロー(委任権限) |
| SPA(ブラウザ) | 認可コードフロー+PKCE |
| ユーザー不在のデーモン/バッチ | クライアント資格情報(アプリ権限) |
| API が別 API を代理呼び出し | On-Behalf-Of フロー |
シナリオ:SPA+バックエンド API+夜間バッチ。 SPA は 認可コードフロー+PKCE でトークン取得し API を呼ぶ。API は 委任権限で「サインインユーザーの代理」として動作し、トークンの スコープを検証。夜間バッチはユーザー不在なので クライアント資格情報(アプリ権限)+証明書で認証。資格情報は Key Vault/マネージド ID で扱い、シークレット直書きを避けます。
Q. トークン取得は? MSAL。Q. ユーザー代理? 委任権限(認可コードフロー)。Q. デーモン? アプリ権限(クライアント資格情報)。Q. SPA は? 認可コード+PKCE。Q. API の認可検証は? 署名/発行元/audience/スコープ・ロール。Q. シークレットより安全? 証明書/ワークロード ID。
混同に注意:
①委任権限(ユーザー代理)とアプリ権限(アプリ自身)は別物——デーモンは委任ではなくアプリ権限。
②アクセストークンと ID トークンは用途が違う(API 呼び出し vs 認証情報)——ID トークンで API 認可しない。
③SPA で implicit フローは非推奨——認可コード+PKCE。
④API は audience/発行元も検証(署名だけでは不十分)。
App Service の「組み込み認証(Easy Auth)」を使うと、コードを書かずに Entra ID 等での認証を追加できます。
3.1.2この節のまとめ
- 認証=Entra ID+MSAL(OAuth2 トークン)
- 委任/アプリ権限を使い分け、API はスコープ/ロール検証
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. アプリから Microsoft Entra ID の OAuth2 トークンを取得するために使うライブラリはどれですか?
Q2. バックグラウンドのデーモンアプリがユーザー無しで自身としてリソースへアクセスする場合の権限種別はどれですか?
Q3. 保護された API がアクセスを認可するために検証すべきものはどれですか?

