B2CとB2BをまたがるID管理機能を考える

Web (クラウド) サービスを開発する際、一般の消費者 (B2C) と法人等のビジネスユーザー (B2B) の両者をターゲットとすることは少なくない。Webサービスの提供には当然のことながらID管理機能が必要となるが、B2CではセルフサービスでのID登録が一般的であるのに対して、B2Bでは管理者によるID (+権限) 管理が求められるなど、両者の要件には異なる部分がある。本記事では、このようなB2CとB2BをまたがるWebサービスでのID管理の機能設計について考察する。

### 事例調査

既に世の中にある有名どころのWebサービスを対象に、ID管理機能の事例調査を行った。

#### Google (Google Workspace / Google Cloud)

* 個人用のGoogle Account (Consumer Account) とは別に、Google CloudもしくはGoogle Workspaceでは、組織でのID管理ができるアカウント (Managed User Account) が提供されている。
* Managed User Accountの作成にはドメインが必要となる。登録したドメインのメールアドレスをログインIDとするアカウントを作成できるようになり、企業内IdPとのフェデレーションも設定できる。
* Managed User Accountの作成前に同じログインID (メールアドレス) を設定しているConsumer Accountが既に存在する場合、管理者はアカウントの移行を促す通知を送信できる。
* 同じログインIDのConsumer AccountとManaged User Accountが同時に存在することもできるようになっており、この場合、該当のユーザーはログイン時にどちらのアカウントを利用するかを選択する必要がある。

##### 参考

* [Migrating consumer accounts](https://cloud.google.com/architecture/identity/migrating-consumer-accounts)
* [Creating and managing organizations](https://cloud.google.com/resource-manager/docs/creating-managing-organization)
* [Types of Google Accounts](https://support.google.com/work/android/answer/6371476)

#### Apple ID

* 個人が自由に作成できるApple ID (Personal Apple ID) とは別に、組織でのID管理ができるManaged Apple IDが提供されている。
* Managed Apple IDは、所有するドメインもしくはAppleのサブドメイン (xxx.appleid.com) のいずれかで登録する。
* 所有するドメインを利用する場合、企業内IdPとのフェデレーションを設定できる。
* フェデレーションを設定すると、ユーザー名 (メールアドレス) が重複するPersonal Apple IDは作成できなくなり、既に作成済みのIDはユーザー名の変更が必要となる。

##### 参考

- [About Managed Apple IDs for business](https://support.apple.com/en-us/HT210737)
- [Get notified about username conflicts in Apple Business Manager](https://support.apple.com/en-ie/guide/apple-business-manager/axme685676ac/web)
- [Link to new domains in Apple Business Manager](https://support.apple.com/en-ie/guide/apple-business-manager/axm48c3280c0/1/web/1)
- [Verify domains in Apple Business Manager and Apple School Manager](https://support.apple.com/en-us/HT212275)

#### Amazon (amazon.com)

* 個人用のAmazonアカウントとは別に、組織向けの購買機能を利用できるビジネスアカウントが提供されている。
* ビジネスアカウントの作成には法人等の情報を確認できる文書の提出が必要となる。
* ビジネスアカウントでは管理者ユーザーが招待を送り、同じ組織に所属するユーザーを追加する仕組み。
* 1つのログインID (メールアドレス) は個人のAmazonアカウントもしくはビジネスアカウントのいずれかのみとしてしか利用できない。
* 個人のAmazonアカウントをビジネスアカウントに変更が可能であるが、変更した場合、これまでの購買履歴等が組織のものとして扱われるようになる。

##### 参考

* [Amazon Business accounts](https://www.amazon.com/gp/help/customer/display.html?nodeId=G201633010)
* [Add people to your business account](https://www.amazon.com/gp/help/customer/display.html?nodeId=201633260)

#### Microsoft Account

* 個人用のMicrosoftアカウントとは別に、組織でのID管理ができる組織アカウント (Organizational Account) が提供されている。
* 組織アカウントは所有するドメインもしくはMicrosoftのサブドメイン (xxx.onmicrosoft.com) のいずれかで作成できる。これにより登録したドメインのメールアドレスをログインIDとするユーザーを管理できるようになる。
* 組織アカウントに設定済みのドメインは、個人アカウントのログインIDとして設定できなくなるが、過去に作られたものが残っている場合がある。この場合、ユーザーがログイン時に利用するアカウントを選択する必要がある。

##### 参考

* [Microsoft Account for Organizations FAQ](https://learn.microsoft.com/en-us/previous-versions/jj592903(v=msdn.10)?redirectedfrom=MSDN)
* [Change your email address to use your custom domain](https://learn.microsoft.com/en-us/microsoft-365/admin/email/change-email-address)
* [[Microsoftアカウント\]と[職場または学校アカウント]の違い | DevelopersIO](https://dev.classmethod.jp/articles/difference-between-microsoft-account-and-azuread/)

#### Zoom

* 個人のアカウントを作成できる他に、組織を作成して複数のアカウントを招待することができる。
* 1つのアカウントは1つの組織にしか所属ができない。
* 組織に対して所有するドメインを設定することができ、この設定を行うと組織の管理者がそのドメインのアカウントを自由に追加・削除できるようになる。
* 組織に設定されたドメインで既にアカウントが存在する場合は、組織のアカウントに統合するか別のログインID (メールアドレス) に変更する必要がある。

##### 参考

* [Getting started with associated domains](https://support.zoom.us/hc/en-us/articles/203395207-Getting-started-with-associated-domains)
* [Linking accounts to an organization](https://support.zoom.us/hc/en-us/articles/360042068932-Linking-accounts-to-an-organization#h_848c1dab-ecfa-4fb1-becf-07695eaaa80d)
* [Combining your Zoom accounts using account consolidation](https://support.zoom.us/hc/en-us/articles/360035969131-Combining-your-Zoom-accounts-using-account-consolidation)

#### Shopify

* Shopifyには厳密には組織という概念は登場しないが、近い概念としてStoreがある。
* アカウント自体には個人用・組織用という区別はなく、利用者がセルフサービスで登録を行う。
* Storeの管理者が招待メールを送信して、Storeにアクセスできるメンバーを追加する。
* 1つのユーザーが複数のStoreに所属することもできるようになっている。

##### 参考

* [Staffing your Shopify store](https://help.shopify.com/en/manual/your-account/staff-accounts)

### 機能設計に関する考察

上記の事例を踏まえて、B2CとB2BをまたがるWebサービスでのID管理の機能設計のポイントを整理する。

#### ログインIDをメールアドレスとするかユーザー名とするか

今回調査した範囲では、いずれもメールアドレスをログインIDとして利用していた。この仕様は個人向けのWebサービスでは一般的であるし、ビジネスにおいてもメールアドレスは最も使われている連絡手段である。企業内IdPでのユーザー認証においてもメールアドレスをログインIDにするのは一般的であると思うので、やはりユーザーにとって受け入れられやすいのであろう。

補足：金融系のWebサービスでは、セキュリティ目的で自動発行されたユーザー名をログインIDとして利用するケースも多くある。

#### B2CとB2BのID管理を分離するか

かつては個人向けと法人向けのID管理を完全に独立させてログイン画面で個人・法人を選択させる、という作りになっているWebサービスをしばしば見かけた。しかしながら今回調査した範囲では全て、(登録時の手続きは違うものの) ID管理はB2CとB2Bで同じとなっていた。

この仕様は、おそらくはログインのUXを考慮してのことと推測する。ログイン画面で個人・法人を選択するのは単純に手間であるし、URLを分けてしまうという手も考えられるが、その場合には検索エンジン等からの流入で間違えて他方のURLにアクセスしてしまったときにログインができないというトラブルに繋がるリスクがある。

#### 組織とユーザーの関係を従属的とするか

この仕様はまず、B2B向けの要件として組織でのID管理機能のサポートが必要かに依存する。企業のメールアドレスでのユーザーの作成・削除の制御、ユーザー認証の強度 (多要素認証など) の設定、企業内IdPとのフェデレーション・プロビジョニングなどの機能提供が必要であれば、組織にユーザーが従属するモデルとせざるを得ない。

一方で、組織でのID管理は運用負荷も発生するため、企業内の一部のメンバーしか利用しないようなWebサービスであれば、ユーザーの登録自体は利用者のセルフサービスで可能として、組織に招待するというモデルにすることも考えられる。今回の調査対象ではAmazonやShopifyがこちらのタイプに相当する。Shopifyの場合はさらに、1ユーザーが複数の組織 (厳密には組織という概念ではないが) に所属することも可能としている。