Azure AD B2Cの拡張属性とカスタム属性の違い

Azure AD B2Cのユーザアカウントを操作する際、拡張属性(ExtensionProperty)とカスタム属性(Custom Attribute)というキーワードがあり紛らわしい…ということで調べてみました。

「拡張属性」と「カスタム属性」の違い

テナントで独自に定義した属性を「カスタム属性」、カスタム属性や非標準の属性をユーザアカウントに格納するための属性を「拡張属性」と呼びます。
(拡張属性には、カスタム属性以外にも従業員IDや作成日時等の非標準的な属性が含まれています。)

参考:

拡張属性

拡張属性の確認

拡張属性(ExtensionProperty )は、次のようにユーザアカウントの一属性として確認できます。
従業員ID(employeeId)等の一部属性は事前定義されています。

拡張属性はDictionary型になっており、複数の属性をkey=value形式で保管しています。

拡張属性と”b2c-extensions-app”

拡張属性の値はユーザアカウントの一部として参照できますが、その値は”b2c-extensions-app”と呼ばれるアプリで保持されています。このアプリはテナント作成時に自動的に登録されており、変更は禁止されています。(このアプリを削除すると、拡張属性も消えてしまうようです。)

User profile attributes(Extension attributes):

Azure AD B2C extends the set of attributes stored on each user account. Extension attributes extend the schema of the user objects in the directory. The extension attributes can only be registered on an application object, even though they might contain data for a user. The extension attribute is attached to the application called b2c-extensions-app. Do not modify this application, as it’s used by Azure AD B2C for storing user data. You can find this application under Azure Active Directory App registrations.

“b2c-extensions-app”は、Azureポータルの[AzureAD B2C]の[アプリの登録]メニューを選択し、[すべてのアプリケーション]で確認できます。

次のようにPowerShellからでも確認できます。

カスタム属性

カスタム属性の追加方法

テナントで独自に使用する属性をポータルから追加できます。
AzureAD B2Cの[アプリの登録]で[すべてのアプリケーション]で確認できます。
例えば、customBoolean(Boolean型)、customInt(int型)、customString(文字列型)、を定義した場合、次のようになります。

カスタム属性の確認方法

カスタム属性は、Azureポータルの[AzureAD B2C]の[ユーザー属性]メニューで開いた画面で、追加や変更できます。
追加したカスタム属性は、内部では”extension_{guid}_カスタム属性名”という属性名で定義されます。カスタム属性と前述の”b2c-extensions-app”を関連付けるために{guid}は、”b2c-extensions-app”のクライアントIDになります。

定義したカスタム属性は、ユーザアカウントの拡張属性で確認できます。
従業員ID(employeeId)等の事前定義された属性は値の有無に関わらず一覧上に表示されますが、カスタム属性の場合は値がないと表示されないことに注意してください。