Microsoft Azure 上でクラウドネイティブなシステムを作る際は、ユーザー情報管理や認証処理を Azure AD B2C を利用して実現することが一般的です。
本記事では、Microsoft Graph API を利用して Azure AD B2C 上のユーザー情報を作成、更新、削除する方法を紹介します。
前提条件
- Azure AD B2C テナントが作成済みであること
- Azure AD B2C テナントに Azure AD B2C 用ユーザーが作成されていること
- Microsoft Graph アプリケーションを登録されていること
- クライアント側は Spring-Boot ベースの Java アプリケーション
pom.xml
作成編を参考にしてください。
Azure AD B2C ユーザーの ObjectId を確認する
Azure AD B2C ユーザーの更新は、対象ユーザーの ObjectId が必要になります。
ObjectId は、ユーザーのプロファイル画面から確認できます。
Azure AD B2C ユーザーの更新
@Test
void updateUser() {
/**
* ユーザーインスタンスの作成
*/
User user = new User();
/**
* ユーザー属性の設定
*/
user.displayName = DISPLAY_NAME_FOR_UPDATE;
ObjectIdentity objectIdentity = new ObjectIdentity();
objectIdentity.signInType = "username";
objectIdentity.issuer = ISSUER;
objectIdentity.issuerAssignedId = ISSUER_ASSIGNED_ID_FOR_UPDATE;
List<ObjectIdentity> identities = new ArrayList();
identities.add(objectIdentity);
user.identities = identities;
/**
* Azure AD B2C 上のユーザーを更新
*/
createIGraphServiceClient(
CLIENT_ID,
CLIENT_SECRET,
DOMAIN_NAME).users(OBJECT_ID_FOR_UPDATE)
.buildRequest().patch(user); // (*1)(*2)
}
(*1) IGraphServiceClient オブジェクトの users メソッドの引数は、更新対象ユーザーの ObjectId になります。
(*2) ユーザー作成時は post メソッドでしたが、ユーザー更新時は、patch メソッドになります。
##サインインタイプについて
作成編で、サインインのタイプを選択できるとお伝えしました。
objectIdentity.issuerAssignedId で設定した値は、サインイン時にアカウント名として利用されます。サインインのタイプによって、指定できる値が異なります。
- ユーザー名認証
- テナント内でユニークな文字列
- メールアドレス認証
- テナント内でユニークな文字列
- {文字列} @ {Active Directoryのドメイン} の形式 (*1)
- フェデレーション連携認証
- テナント内でユニークな文字列
- @ マークを含むメールアドレスとして正しい形式
(*1) Active Directory のドメインは、カスタム ドメインを追加していない場合、{テナント名}.onmicrosoft.com のみになります。他のドメインのユーザーを設定したい場合は、Active Directory B2C のカスタム ドメインを有効にしてください。
##実行結果
上記を実行すると、Azure AD B2C 上に指定した属性のユーザーが更新されていることが確認できます。
次回は、ユーザー情報の削除方法について記述します。
読んで頂きありがとうございました。
####検証コード
https://github.com/ksper911/graphapi-for-azureadb2c
####Graph API リファレンス
https://docs.microsoft.com/ja-jp/graph/api/user-update?view=graph-rest-1.0&tabs=http