アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング Azure 基盤技術

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

投稿日:2020年9月19日 更新日:

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

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

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

参考:

拡張属性

拡張属性の確認

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

> 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形式で保管しています。

> (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”と呼ばれるアプリで保持されています。このアプリはテナント作成時に自動的に登録されており、変更は禁止されています。(このアプリを削除すると、拡張属性も消えてしまうようです。)

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からでも確認できます。

> 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になります。

> Get-AzureADApplication | Get-AzureADApplicationExtensionProperty

ObjectId  Name                                                     TargetObjects
--------  ----                                                     -------------
xxx       extension_93a0a2af1918411486f7a58f77cdb054_customInt     {User}
xxx       extension_93a0a2af1918411486f7a58f77cdb054_customBoolean {User}
xxx       extension_93a0a2af1918411486f7a58f77cdb054_customString  {User}

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

> 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



(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, Azure, 基盤技術

執筆者:

関連記事

Javaでサポートする暗号化アルゴリズム

Java暗号化アーキテクチャ Javaで暗号化処理を実装する場合、Java暗号化アーキテクチャ(Java Cryptography Architecture: JCA)と呼ばれるフレームワークを使いま …

パスワード情報の保管方式の比較

Webアプリの開発でパスワードを使ったユーザ認証を設計・実装する機会がよくある。 後輩への説明や勉強会ネタとして、この辺の話を纏めてみようと思う。 概要 オンラインバンキングやネットショッピングのサイ …

ASP.NET Core: エラーメッセージ一覧のカスタマイズ

ASP.NET Core標準のasp-validation-summary属性では単純なエラーメッセージの一覧しか出力しかできません。 ここでは、asp-validation-summary属性と同様 …

マスタデータ生成ツール

開発や結合試験、本番環境等で使用するマスタデータをExcelで管理することがあります。 そのようなExcelファイルからDBに登録するためのインサート文を作成するために、いつもツールに悩むので作成して …

Wildflyでリクエストをダンプする

Webアプリのデバッグや障害対応等で、Webアプリに対するリクエストやレスポンスのHTTPヘッダや内容を確認したい場合がある。 次のような場面ではクライアント側での確認ができないため、今回のようにAP …