🐈

Easy Authを用いたOpenID Connectの認証フロー

に公開

はじめに

App Serviceを用いる際にEntra ID認証をEasy Authで実装することがよくあります。
そのたびに、どのような認証フローで認証しているのだろうと疑問に思っていたのですが、重い腰を挙げてこんな感じであろうというところまで調べられたので、この記事を書きました。

注意書き

本記事の内容は筆者による検証結果のため、実際の挙動や最適解が異なる可能性があります。
本記事を参考にしたことによるいかなる損害・不利益についても筆者は責任を負いませんので、利用は自己責任でお願いいたします。

Easy Authにおいて設定されるもの

Easy Authでは多くの設定が自動的に設定され、簡単にApp Serviceに対するアクセスに対して認証設定を適用できます。
以下が代表的な設定になります。

  • Entraテナント上にアプリケーション(サービスプリンシパル)を登録https://learn.microsoft.com/ja-jp/entra/identity-platform/quickstart-register-app
  • アプリケーション上の設定
    • リダイレクトURIの登録
    • アプリケーションクライアントシークレットの作成
    • IDトークンの設定
    • アクセス許可設定
  • App Service上の認証設定
    • アプリケーションとの関連付け
    • シークレット値の設定

ここでは上記の設定手法について解説はしませんが、これらの設定は全て完了しており、Easy Authが使用できる前提で話を進めていきます。

Easy Authの認証について

Easy Authの認証では、OpenID Connect(OIDC)を使用されており、OpenID Connect(OIDC)が定義する以下の認証フローを全て使用可能です。

  • Authorization Code Flow
  • Implicit Flow
  • Hybrid Flow

今回はシンプルな構成であるAuthorization Code Flowの認証タイプを用いた認証フローを追っていきます。
またOIDCに対して詳細な記載はしないため、OIDCについて知りたい方はこちらを参照してください。

また実装としては、App Serviceの前に認証を実施するEasy Auth用のコンテナをプロキシとして立て、ユーザーのアクセスを経由させる形で実装するようです。(リンク)

Easy Authを用いたOpenID Connectの認証フローについて

フローを追っていく前に、OIDCの用語とEasy Authを用いたEntra ID認証時に使用するサービスの対応表を以下に示します。

OpenID Connect Easy Authを用いたEntra ID認証
エンドユーザー エンドユーザー
リライングパーティ Easy Auth, App Service
OpenIDプロバイダー Entra ID
UserInfo Graph API

対応関係を示したところで、エンドユーザーがApp ServiceにWebアプリケーションにアクセスするシナリオを例にEasy Authを使用したOpenID Connectのフローを追っていきます。

  1. エンドユーザーがEasy Auth(App Service)へアクセスします。
  2. エンドユーザーが認証されていないため、認証させるためにEasy AuthはエンドユーザーをEntra IDへリダイレクトさせます。
  3. リダイレクトを受け、エンドユーザーはEntra IDへ認証するためアクセスします。
  4. Entra IDは認証するためにログイン画面をエンドユーザーへ表示します。
  5. エンドユーザーはログイン情報をEntra IDへ送信します。
  6. エンドユーザーに対する認証が完了すると、Entra IDは認可コードとリダイレクトURIをエンドユーザーに連携します。
  7. エンドユーザーは受け取った認可コードをEasy Authへ連携するためにリダイレクトURIへリダイレクトします。
  8. リダイレクトを受けたEasy Authは、認可コードを用いてアクセストークンとIDトークンを取得するためにEntra IDへリクエストします。
  9. Entra IDは認可コードを検証し問題がなければ、Easy Authに対してアクセストークンとIDトークンを発行します。
  10. Easy Authは発行されたIDトークン内のデータを検証する。
  11. Easy Authはアクセストークンを用いて認可に関するGraph APIに対してエンドユーザーの情報をリクエストします。
  12. Graph APIはEasy Authに対してエンドユーザーの情報を提供する。
  13. Easy AuthはエンドユーザーにApp Serviceへリダイレクトさせる。
  14. リダイレクトを受け、エンドユーザーはApp Serviceにアクセスする。
  15. Easy Authは再度IDトークンを検証する。
  16. トークンの検証に問題がなければ、App Serviceに載せたアプリケーションにアクセスを転送する。
  17. App ServiceはエンドユーザーにWebページを表示させるようにアクセスを返す。

Easy Authの流れ

さいごに

おそらくEasy Authの内部実装はMSALのため、App Serviceに登録されたクライアントシークレットが8と11で使用されているかを調査してもよかったのですが、今回はここまでとさせてください。
気分が乗れば続けて調査しようと思います。

参考文献

Discussion