Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Microsoft 365 の認証と承認を理解する / Understanding Micro...

Microsoft 365 の認証と承認を理解する / Understanding Microsoft 365 Authentication and Authorization

第 12 回 JPM365DEV 勉強会 (https://jpm365dev.connpass.com/event/370200/) に登壇したときのスライドです。

Avatar for Takashi Shinohara

Takashi Shinohara

October 16, 2025
Tweet

More Decks by Takashi Shinohara

Other Decks in Technology

Transcript

  1. 認証の三要素 所持情報 本人のみ所持可能な物理 的なものによる証明 • パスポート • 運転免許証 • マイナンバー

    カード • クレジット カード • ハードウェア トークン 知識情報 本人のみ知りうる情報による 証明 • 名前 • 住所 • 電話番号 • 暗証番号 • パスワード 生体情報 本人の身体的な特徴による 証明 • 顔 • 指紋 • 声紋 • 虹彩
  2. OAuth 2.0 の仕組み OAuth 2.0 には 4 つのロールが関与する • 承認サーバー

    • クライアント • リソース オーナー • リソース サーバー
  3. OAuth 2.0 を現実世界で表現すると 出演者 (リソース オーナー) 依頼 マネージャー (クライアント) 受付

    運営会社 (承認サーバー) 発行 入館証 (アクセス トークン) 入場 イベント会場 (リソース サーバー)
  4. アクセス トークン リソース サーバーがクライアントを許可するために使用されるトークン RFC 6749 (The OAuth 2.0 Authorization

    Framework) では以下のように定義される • リソース サーバー、承認サーバー、クライアントの間でのみ共有されること • 第三者による生成、改変、推測ができないようにすること • クライアントは最小限のスコープで要求できること アクセス トークンの使用方法として Bearer トークンや JWT (JSON Web Token) が使用される 入館証を偽造できないための仕組み
  5. JWT (JSON Web Token) 推奨される読み方は jot (ジョット) ヘッダー、ペイロード、署名で構成される • ヘッダー:

    トークンの種類と署名アルゴリズム • ペイロード: トークンに含まれるクレームのセット • 署名: トークンの改ざんを防ぐための署名
  6. クレーム クレーム=正当な権利の主張 承認に関する発行者、有効期限、ユーザー情報などのデータが含まれる リソース サーバーはクレームを検証することで正当性を確認する クレーム名 説明 実際の例 iss 発行者

    (Issuer) https://sts.windows.net/{tenant-id}/ sub 主体 (Subject) vz9jzDIIQQLxgevubSyGmj53MmAmpntekwJ_qJPH3Tg aud 対象 (Audience) 00000003-0000-0000-c000-000000000000 exp 有効終了日時 (Expiration) 1707052800 nbf 有効開始日時 (Not Before) 1707049200 iat 発行日時 (Issued At) 1707049200
  7. アプリケーションの登録 組織の Microsoft Entra ID にアプリケーション登録をすることで独自のアプリケーションに認証お よび承認を実装できる • シングルテナント: 自組織でのみ使用するアプリケーション

    • マルチテナント: ISV など外部に提供するアプリケーション Azure ポータルまたは Microsoft Entra 管理センターから登録する 以前はマイクロソフト アカウント (個人アカウント) でも登録できたが現在は非推奨
  8. 公開クライアントと機密クライアント 公開クライアント 機密クライアント ユーザーのデバイス上で実行され、資格 情報 (クライアント シークレットや証明 書) を保存できないクライアント •

    シングル ページ アプリケーション • デスクトップ/モバイルアプリ • コンソール アプリ サーバー上で実行され、資格情報 (クラ イアント シークレットや証明書) を保存で きるクライアント • Web アプリ • Web API • デーモン サービス (バッチ プログラム)
  9. OAuth 2.0 フロー クライアントのシナリオに合わせてさまざまなフローが存在する (下記は代表的なもの) フロー名 説明 RFC Authorization Code

    Flow 認可コードを使ったフロー RFC 6749 Authorization Code Flow with PKCE PKCE (Proof Key for Code Exchange) を使ったフロー RFC 7636 Implicit Flow 暗黙的な許可フロー (非推奨) RFC 6749 Client Credentials Flow クライアント資格情報を使ったフロー RFC 6749 Resource Owner Password Credentials Flow パスワード資格情報を使ったフロー (非推奨) RFC 6749 Device Code Flow デバイス コードを使ったフロー RFC 8628 On-Behalf-Of Flow (OBO) 別の API の呼び出しに使われるフロー RFC 8693