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のフローを追っていきます。
- エンドユーザーがEasy Auth(App Service)へアクセスします。
- エンドユーザーが認証されていないため、認証させるためにEasy AuthはエンドユーザーをEntra IDへリダイレクトさせます。
- リダイレクトを受け、エンドユーザーはEntra IDへ認証するためアクセスします。
- Entra IDは認証するためにログイン画面をエンドユーザーへ表示します。
- エンドユーザーはログイン情報をEntra IDへ送信します。
- エンドユーザーに対する認証が完了すると、Entra IDは認可コードとリダイレクトURIをエンドユーザーに連携します。
- エンドユーザーは受け取った認可コードをEasy Authへ連携するためにリダイレクトURIへリダイレクトします。
- リダイレクトを受けたEasy Authは、認可コードを用いてアクセストークンとIDトークンを取得するためにEntra IDへリクエストします。
- Entra IDは認可コードを検証し問題がなければ、Easy Authに対してアクセストークンとIDトークンを発行します。
- Easy Authは発行されたIDトークン内のデータを検証する。
- Easy Authはアクセストークンを用いて認可に関するGraph APIに対してエンドユーザーの情報をリクエストします。
- Graph APIはEasy Authに対してエンドユーザーの情報を提供する。
- Easy AuthはエンドユーザーにApp Serviceへリダイレクトさせる。
- リダイレクトを受け、エンドユーザーはApp Serviceにアクセスする。
- Easy Authは再度IDトークンを検証する。
- トークンの検証に問題がなければ、App Serviceに載せたアプリケーションにアクセスを転送する。
- App ServiceはエンドユーザーにWebページを表示させるようにアクセスを返す。

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