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

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

執筆者:

関連記事

.NET Core: JsonSerializerの単純な使い方

JsonSerializerの基本的な使い方とサンプルを説明します。 概要 .NET Core 3.1の標準パッケージSystem.Text.Jsonに含まれるJsonSerializerを使って、ク …

Javaにおけるファイルパスの正規化

サーバ側でのzipファイルの解凍等の際に、意図しないディレクトリやファイル(ディレクトリトラバーサル攻撃)へのアクセスを防ぐための検証として、絶対パスを正規化したい場合がある。 Fileクラスを使った …

Java正規表現によるパラメータ置換

mybatis-generatorが生成するクエリカスタマイズのために、生成されたクエリ上のパラメータを置換する方法を調べたので記載しておきます。 サンプルプログラム Java言語の場合、標準ライブラ …

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

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

Javaでのパスワード付きzipファイルの圧縮/解凍方法(ZipCrypto/AES)

先日、JavaでのZIP暗号化の考察という記事を書きましたが、zip4jのメンテナンスが再開されており、バージョン2系が公開されていましたので、これを使って通常のzip圧縮/解凍、パスワード付きzip …