新しい顧客向けの Entra External ID (CIAM) について

# はじめに
既にご存じ方も多いと思いますが、パブリックプレビューとして提供されていた顧客向けの Entra External ID が米国時間の2024年5月15日に一般公開(GA)しています。(この記事を書き始めたのは5月だったのですが、もう7月になってしまいました💦）

https://techcommunity.microsoft.com/t5/microsoft-entra-blog/announcing-general-availability-of-microsoft-entra-external-id/ba-p/3974961

名称が変わって分かり難いのですが、マイクロソフトのオンラインドキュメントでは **外部テナントの外部 ID** と呼んでいます。この **外部テナントの外部 ID** が Azure AD B2C の後継の個人顧客、法人顧客向けのID管理ソリューションになります。外部テナントの外部 ID は分かり難いのでここでは **CIAM (Customer Identity and Access Management)** と呼ぶことにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/cfbc958e-0f9b-4288-7e41-5c14db8ba89d.png)

https://learn.microsoft.com/ja-jp/entra/external-id/customers/overview-customers-ciam

現行の Azure AD B2C (AAD B2C) は以下の FAQ にあるように少なくとも2030年5月までは引き続きサポートされます。すぐにサポートが終了することはないのでご安心ください。ただし、**AAD B2C の新規サービス提供は2025年4末まで**ですので AAD B2C を試したい方はお早めにテナントを作成してください。(詳細は以下のFAQにてご確認ください。)

https://learn.microsoft.com/ja-jp/entra/external-id/customers/faq-customers

# なぜ CIAM が"外部テナントの外部 ID" ?
Entra External ID (外部ID) には二つの意味があります。そのひとつが**顧客向けの外部テナントの外部ID(CIAM)** であり、もうひとつが **従業員(ワークフォース)テナントの外部 ID** です。こちらは従業員向け、組織のユーザー向けであり、B2B コラボレーションで使用する外部 ID です。（ゲストユーザーの方が分かりやすいですね:sweat_smile:）
イメージは以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/014e7011-b8aa-653f-ae42-063698a3eee7.png)

bob@fabrikam.com アカウントはホームテナントの contoso.com からみて外部 ID になります。この外部 ID のbob@fabrikam.com をホームテナントが受け入れるか受け入れないかを制御する機能が従業員テナントの外部 ID の重要な機能のひとつです。(External Identities | テナント間アクセス設定で設定できます。）
上図の右の CIAM はホームテナント(contoso.com)からみて完全に外部のテナントであり、ホームテナントでは CIAM のユーザーを制御することはできません。なので、完全に外部のテナントの外部の ID と言えます。(分かり難いですね。:sweat_smile:)

# Azure AD B2C と CIAM の違いは？
Azure AD B2C と CIAM の一番大きな違いはアーキテクチャーです。AAD B2C のアーキテクチャーは認証フローなどのポリシー部分を担っている AAD B2C ポリシーエンジンがフロントに位置し、バックエンドに Entra ID (AAD B2C 用の Entra ID) がある構成になっています。このポリシーエンジンと Entra ID を分離した構成を取ることでパフォーマンスのためにスケールし易く、さらにカスタムポリシーで柔軟に認証フローを構成することを可能にしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/c326ca15-e130-de75-7f86-340b9e86cfed.png)

一方の CIAM は組織、従業員向けの Entra ID とは別テナントですが、認証機能を Entra ID と統合しています。Azure AD B2C だけで実現するにはハードルが高かったパスワードレス認証ですが、CIAM の場合 Entra ID と同様にパスワードレス認証も利用できるようになる予定です。さらにパフォーマンス面では、AAD B2C と同様にスケールさせることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/1da67861-1100-11c1-ad2b-010368e8c7bd.png)

# CIAM と Azure AD B2C の ID トークンの違い
CIAM は認証機能を Entra ID と統合したため発行する ID トークンが Azure AD B2C とは若干異なります。

CIAM から発行の IDトークンは以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/cf3eb7a1-8932-98ec-a928-aa769ce5e2e1.png)

次に、Azure AD B2C が発行した ID トークンは以下になります。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/2aa7f36c-7bdb-65e8-e5bc-af324b30eae7.png)

CIAM の ID トークンの Ver (バージョン)は Entra ID と同じ **2.0** になります。そして、注目は **sub(subject)** です。 CIAM の sub は、Entra ID と同じペアワイズ識別子で、アプリケーション ID に一意の値です。それに対して Azure AD B2C はテナントで一意の値でディレクトリのユーザーオブジェクト ID を使用しています。CIAM でも AAD B2C と同様にテナントで一意のユーザー識別子にしたい場合は sub ではなく **oid** を使う必要があります。 

# まとめ
5月15日に一般公開された Azure AD B2C の後継ソリューションの Microsoft Entra External ID(CIAM) ですが、現時点(2024年7月2日)では Azure AD B2C と比較すると幾分機能が不足しています。しかしながらパスワードレス認証のように Azure AD B2C では実現が難しい機能も追加される予定です。いつの間にか AAD B2C と同等か良くなっているかもしれません。是非定期的にチェックしましょう！

:::note info
投稿内容は私個人の意見であり、所属企業・部門とは関係ありません。また、いかなる保証を与えるものでもありません