Azure AD B2Cのユーザアカウントを操作する際、拡張属性(ExtensionProperty)とカスタム属性(Custom Attribute)というキーワードがあり紛らわしい…ということで調べてみました。
「拡張属性」と「カスタム属性」の違い
テナントで独自に定義した属性を「カスタム属性」、カスタム属性や非標準の属性をユーザアカウントに格納するための属性を「拡張属性」と呼びます。
(拡張属性には、カスタム属性以外にも従業員IDや作成日時等の非標準的な属性が含まれています。)
参考:
- User profile attributes(Extension attributes)
- Azure Active Directory B2C でカスタム属性を定義する
- Azure Active Directory B2C:カスタム プロファイル ポリシーでカスタム属性を有効にする
拡張属性
拡張属性の確認
拡張属性(ExtensionProperty )は、次のようにユーザアカウントの一属性として確認できます。
従業員ID(employeeId)等の一部属性は事前定義されています。
1 2 3 4 5 6 7 | > Get-AzureADUser -ObjectId xxx | Format-List -Property DisplayName,ExtensionProperty DisplayName : 佐藤 一郎 ExtensionProperty : {[odata.metadata, https://xxx], [odata.type, Microsoft.DirectoryServices.User], [createdDateTime, 2020/09/14 12:47:13], [employeeId, ]...} |
拡張属性はDictionary型になっており、複数の属性をkey=value形式で保管しています。
1 2 3 | > (Get-AzureADUser -ObjectId xxx).ExtensionProperty.GetType().Fullname System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, ... |
拡張属性と”b2c-extensions-app”
拡張属性の値はユーザアカウントの一部として参照できますが、その値は”b2c-extensions-app”と呼ばれるアプリで保持されています。このアプリはテナント作成時に自動的に登録されており、変更は禁止されています。(このアプリを削除すると、拡張属性も消えてしまうようです。)
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からでも確認できます。
1 2 3 4 | > Get-AzureADApplication -Filter "startswith(DisplayName, 'b2c')" ObjectId AppId DisplayName -------- ----- ----------- xxx 93a0a2af-1918-4114-86f7-a58f77cdb054 b2c-extensions-app. Do not ... |
カスタム属性
カスタム属性の追加方法
テナントで独自に使用する属性をポータルから追加できます。
AzureAD B2Cの[アプリの登録]で[すべてのアプリケーション]で確認できます。
例えば、customBoolean(Boolean型)、customInt(int型)、customString(文字列型)、を定義した場合、次のようになります。
カスタム属性の確認方法
カスタム属性は、Azureポータルの[AzureAD B2C]の[ユーザー属性]メニューで開いた画面で、追加や変更できます。
追加したカスタム属性は、内部では”extension_{guid}_カスタム属性名”という属性名で定義されます。カスタム属性と前述の”b2c-extensions-app”を関連付けるために{guid}は、”b2c-extensions-app”のクライアントIDになります。
1 2 3 4 5 6 7 | > Get-AzureADApplication | Get-AzureADApplicationExtensionProperty ObjectId Name TargetObjects -------- ---- ------------- xxx extension_93a0a2af1918411486f7a58f77cdb054_customInt {User} xxx extension_93a0a2af1918411486f7a58f77cdb054_customBoolean {User} xxx extension_93a0a2af1918411486f7a58f77cdb054_customString {User} |
定義したカスタム属性は、ユーザアカウントの拡張属性で確認できます。
従業員ID(employeeId)等の事前定義された属性は値の有無に関わらず一覧上に表示されますが、カスタム属性の場合は値がないと表示されないことに注意してください。
1 2 3 4 5 6 7 8 9 10 11 | > Get-AzureADUser -ObjectId xxx | Select DisplayName -ExpandProperty ExtensionProperty Key Value --- ----- odata.metadata https://xxx odata.type Microsoft.DirectoryServices.User createdDateTime 2020/09/18 13:12:53 employeeId 12345 onPremisesDistinguishedName userIdentities [] extension_93a0a2af1918411486f7a58f77cdb054_customInt 987654321 |