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

主に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, 基盤技術

執筆者:

関連記事

ASP.NET Core: エラーメッセージの日本語化

ASP.NET Coreでは入力値を検証するための[Required]等の検証属性が提供されていますが、エラーメッセージが英語になっています。 検証属性以外でも画面の実装方法によってはモデルバインディ …

OWASPが推奨する強力なパスワード

Webアプリケーションのセキュリティの標準化や推進を行うOWASPでは、強力なパスワードの使用を推奨しているので、それをまとめた。 cheatsheetseries.owasp.org  1 …

Webアプリ用のサイトマップ生成

Googleの検索結果への表示を促進するためにGoogleに対してサイトマップを提供する必要がある。 WordPressでは様々なプラグインを使ってサイトマップを作成できるが、Webアプリの場合は独自 …

WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。 概要 Googleさんの考え 保護されたウェブの普及を目指して(2 …

VBAでケバブ・スネーク・パスカル・キャメル変換

開発の現場では、Excelに定義したクラスやテーブル等の設計内容に基づいて、VBAで自動的にソースコードやSQL文等の成果物を生成したい場合があります。この処理を実装する場合、Excel上の項目名を、 …