Azure AD B2Cのチュートリアルがうまくいかなかった理由

# Azure AD B2Cのチュートリアルを頭からやってみる

Azure AD B2Cを久しぶりに扱うことになりましたが、以前どうやったか全く覚えていませんでした。そこでチュートリアルをやってみたのです。

1. [Azure AD B2Cのテナント作成](https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/tutorial-create-tenant)
1. 作ったAzure AD B2Cのディレクトリにログイン
1. [Webアプリケーション登録](https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/tutorial-register-applications?tabs=app-reg-ga)
1. [ユーザーフローを作成する](https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/tutorial-create-user-flows)

# 途中で進められなくなる
ところが、この**ユーザーフローを作成する**チュートリアルで説明しているテストをやろうとした時に困ったことになりました。チュートリアルでは作成したユーザーフローをテストする画面で、作ったWebアプリケーションを選ぶことになっていますが、私の画面ではDropdownリストがグレーアウトして選択できるようになっていませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/58c5edf1-420b-fa53-eb71-301cc383b139.png)

あれ？と思って色々と変更してみましたが全く変化がありません。とりあえず無視してチュートリアルの続きにあるサンプルクライアントを起動してみましたが、エラーとなってしまいます。アプリ登録からやり直してみたり、設定値を変えてみたり。様々なことをやりましたが一向にDropdownリストにはアプリケーションが表示されません。

そういえばアプリケーションの登録には二つメニューがあることを思い出して、もう一つのレガシーとなっているほうを選択してアプリケーションを作ると、ユーザーフローのDropdownリストにそのアプリケーションが表示されることがわかりました。

なんだかよくわかりませんが、これで解決、というわけにもいかないので最初のアプリケーション登録とレガシーで作ったアプリケーション登録のマニフェストを比較することまでしましたが、原因がさっぱりわかりません。（実に丸々2日も調べました）

# 原因が判明

と、そんなときにふとこんなページにたどり着きました。

[Azure Active Directory B2C の新しいアプリの登録エクスペリエンス](https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/app-registrations-training-guide)

ページタイトルからは内容が想像できませんが、要するに新しいほうのアプリケーション登録メニューについての説明のようです。実はとてもわかりにくかったのですがここに答えがありました。 次のように説明が書いてありました。 

>### 新たにサポートされているアカウントの種類
>新しいエクスペリエンスでは、次のオプションからサポート アカウントの種類を選択します。
> ・ この組織のディレクトリ内のアカウントのみ。
> ・ 任意の組織ディレクトリ内のアカウント (任意の Azure AD ディレクトリ - マルチテナント)。
> ・ 任意の組織ディレクトリ内のアカウントまたは任意の ID プロバイダー。 Azure AD B2C でユーザーを認証します。
>アカウントの種類の違いを理解するには、[作成] エクスペリエンスで [選択に関する詳細] を選択します。

>従来のエクスペリエンスでは、アプリは常に顧客向けアプリケーションとして作成されていました。 これらのアプリの場合、アカウントの種類は、 **[任意の組織ディレクトリ内のアカウントまたは任意の ID プロバイダー。Azure AD B2C でユーザーを認証します。]** に設定されます。

ここからわかるのは、一番下の選択肢が今までのもので、上の二つを選択できるようになったのはこの新しいアプリケーション登録画面からなのだな、ということです。そして、この説明文の直下の次の注意書きがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/c542a612-692f-7977-c85b-61d3262c1c78.png)

ふーん、と思って一瞬読み流してしまいました。あれ？何かおかしいぞ？と違和感を感じてジーっとこの注意を読みました。

「このオプション」ってなんのことだ？

日本語的にはこのオプション、というと上記にある３つのことを指すと思います。しかし、これが英語の文章だとすると、おそらくこのオプション、というのは一番最後に説明している**[任意の組織ディレクトリ内のアカウントまたは任意の ID プロバイダー。Azure AD B2C でユーザーを認証します。]**のことではないだろうか？と閃きました。

# そして解決

そして、新しくアプリケーションを登録する時に**[任意の組織ディレクトリ内のアカウントまたは任意の ID プロバイダー。Azure AD B2C でユーザーを認証します。]**を選ぶと！

無事にユーザーフローのDropdownに表示されました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/60d0aad2-b1a7-85d4-08e1-e06e5a2d19a5.png)

そう、私はWebアプリケーションを登録するときに1か所だけチュートリアルにある指定から変更をしていたんです。チュートリアルには次のように書いてありました。

>[サポートされているアカウントの種類] で、 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)(任意の組織ディレクトリ内のアカウント (任意の Azure AD ディレクトリ - マルチテナント) と、個人用の Microsoft アカウント (Skype、Xbox など)) を選択します。

しかし、私はこれを次の選択に変更しました。これから作る本番用アプリ的にはそれを選択するのがマッチしていそう、と思ったのです。

>・ この組織のディレクトリ内のアカウントのみ。

ところが、このオプションはアプリケーション登録時の選択よっては後から変更できないオプションがあるのです。
登録時に

> ・ この組織のディレクトリ内のアカウントのみ。
> ・ 任意の組織ディレクトリ内のアカウント (任意の Azure AD ディレクトリ - マルチテナント)。

のどちらかを選ぶと、後から

> ・ 任意の組織ディレクトリ内のアカウントまたは任意の ID プロバイダー。 Azure AD B2C でユーザーを認証します。

に変更できないのです。変更できないようにグレーアウトになるのではなく、画面に出てくることすらありません。（だから気付かなかった）

# 結論

今回、私はチュートリアルを勝手に内容を変えてしまったが為に要らぬトラブルに巻き込まれたのですが、おかげで重要なことを一つ知ることができました。

「新しいアプリケーション登録画面で増えた新しい**アカウントの種類**を選ぶと、ユーザーフローは使用できない」

ということです。B2CテナントでAzureADのような使い方をするようなオプションのようなので、ユーザーフローが使えないとなるとこの選択肢の存在理由がよくわからないです。

この理解は間違っている可能性も高いのですが、今のところの私の理解はこんな感じです。