Azure Active Directory B2C のテナント作成とユーザーフローの実行まで行ってみた

2023.12.27

いわさです。

Azure のアーキテクチャーセンターの中にはマルチテナント SaaS に関するガイダンスが提供されています。
AWS の SaaS ガイダンスを見たあとに Azure の SaaS ガイダンスを見てみると、色々と学びがあっておもしろいです。

設計アプローチの他にサービス固有のガイダンスも提供されているのが素晴らしいです。
今回はこの中の SaaS アイデンティティ部分の検証を行いたくて、まずは Azure Active Directory B2C の導入部分を行ってみましたので紹介したいと思います。

Azure AD が Microsoft Entra にリブランドされたりとちょっと最近の動向は掴めてなかったのですが、使ってみたところ Azure AD B2C はそのままで良いみたいですね。

Azure AD B2C テナントの作成

テナントの作成は Marketplace の「Azure Active Directory B2C」から開始します。
最初 Microsoft Entra External ID に変わったのかと思って Microsoft Entra のメニューを確認したのですが見当たりませんでした。

Microsoft Entra External ID の機能のひとつとして構成されているらしいですが、Entra テナントから設定出来るのは B2B コラボレーションのほうです。

ここでは新規テナントを作成するので「Create a new Azure AD B2C Tenant」を選択します。
なおここで言っているテナントと SaaS アプリケーションのテナントは必ずしも同じ意味にはならないので注意が必要です。別の記事でマルチテナント SaaS を設計する際に Azure AD B2C テナントをどう構成するのが良いか取り扱いたいと思います。

テナントの組織名などを入力していきます。
ここでひとつポイントなのが、ロケーションが日本の場合は「Go-Local アドオン」という有料のオプションを有効化することが出来ます。

Azure AD B2C のデータ保存場所については以下のドキュメントに記述されていて、ロケーションを日本に選択した場合は「アジア太平洋」に保存されるらしいです。

上記に対して組織のポリシーやコンプライアンスに関してデータ保管要件が国内だと定められている場合はこの Go-Local アドオンを有効化することで、保管場所を日本とすることをマイクロソフトに約束させるというオプションらしいです。おもしろいですね。

料金ページによると、本日時点ではアクティブユーザーごとに $0.02/月 が発生するようです。P2 ($0.01625/月/アクティブユーザー)でも 2 倍強のコストになるので...検討に検討を重ねる必要がありますね!

今回は軽い検証用途なので有効化しないですが、本番ワークロードの場合はこのあたりのデータ保存場所については意識しておくと良いでしょう。ちなみに Go-Local アドオンが利用可能なのは日本とオーストラリアのみらしいです。

テナントが作成されたら Azure ポータルのディレクトリを切り替えることでアクセス出来ます。
次のリンクからも切り替え可能です。

ディレクトリが切り替わりましたね。

ディレクトリへアプリを登録

ディレクトリが作成出来たら、アプリケーションを登録します。
実際のアプリが現時点で存在しているかどうかに関わらず、クライアント ID やシークレットを払い出すために、この認証基盤を使うアプリケーションを想定して登録だけを行います。別途アプリケーション実装時にはここで払い出されたクライアント ID などを使用する形になります。

今回は元になるアプリケーションの開発前なので、認証イベント発生後にトークンを受け取るアプリケーション側のエンドポイントがまだ無いのでリダイレクト URI の設定に困るところです。
これまでは私は localhost で受け取って開発者ツールとかでトークンを抜き出したりしていたのですが、どうやらマイクロソフト公式ドキュメントによると、マイクロソフトから提供されている JWT 検証甩のアプリ「jwt.ms」をリダイレクト先にしてそのままトークンの検証出来ることを知りました。これは便利かもしれないな。

ということでリダイレクト URI には`https://jwt.ms`を指定します。

今回は検証用なのでアプリの認証メニューから「暗黙的な許可およびハイブリッドフロー」として ID トークンとアクセストークンを有効化しておきます。実際には暗黙的な許可のフローが適切ではなく認証コードフローを優先すべきケースがあるので確認するようにしましょう。

ユーザーフローを作成してテストする

最後に、ユーザーフローでサインインタイプを試してみたいと思います。
メニューから「ユーザーフロー」を選択し新規作成を行います。

ユーザーフロータイプは「サインアップとサインイン」、バージョンは「推奨」を選択します。

MFA の確認など行いたければこのあたりもあわせてカスタマイズしてみてください。
私は今回はトークンのクレーム内容を確認したかったので次のように設定しました。

続いて、作成したユーザーフローの詳細画面を開きます。

ちなみに本題とは関係ないのですが、日本語対応やカスタマイズ性について確認したかったので、ユーザーフロー内でページレイアウトや言語の設定を行ってます。
ページレイアウトをスレートグレーに変更し、言語は日本語にしています。ページレイアウトはやろうと思ったらかなりカスタマイズが出来そうで良いなと思いました。

ユーザーフローの設定が出来たらこの画面からテスト実行が出来るので試してみましょう。

アプリケーションやリダイレクト URI が先程作成・設定したものであることを確認し実行します。

テナントのサインイン画面が表示されました。
新規ユーザをサインアップしても良いですし、既存ユーザーでサインインしても良いです。
テスト実行というより実際にフローが実行されているのでディレクトリにユーザーが作成されます。そこだけご注意ください。

サインインに成功するとリダイレクト先にトークンが渡されていることが確認出来ました。

さいごに

本日は Azure Active Directory B2C のテナント作成とユーザーフローの実行まで行ってみました。

Azure AD B2C にしばらく触ってなかったので、Microsoft Entra にリブランドされたタイミングでガラッと変わったのかも?と思って導入部分から触ってみたのですが、全然変わってなくて良かったです。

次回以降はカスタムクレームを設定したり Web アプリケーションへの組み込みをしてみたいと考えています。