我在Azure Active Directory B2C租户中添加了一个自定义Organization
字段作为用户属性,如下所示:
我使用Microsoft Graph .NET Client Library来管理Azure Active Directory B2C中的用户,并希望使用类似于以下代码的内容来设置用户的自定义Organization
字段和用户&# 39;内置Email Addresses
字段。
await graphClient.Users[user.Id].Request().UpdateAsync(new User()
{
Email Addresses = new StringCollection("myemail@mydomain.com")
Organization = "Microsoft"
});
两个问题:
Email Addresses
?Organization
?此文档显示how to create a custom attribute,但未说明如何使用Graph Client访问或使用该属性。
本文档介绍了如何create custom attributes and edit the Relying Party (RP) file。
有更简单的方法吗?然后获取/设置这些自定义用户属性的graphClient
代码是什么?
答案 0 :(得分:2)
Microsoft Graph API以及Microsoft Graph Client是否支持向Azure AD B2C租户注册的扩展属性,这有点令人困惑。
当我使用Azure AD Graph API查询用户对象时,将返回自定义属性(例如“CreatedTime”)。
https://graph.windows.net/{tenant}/users/{objectId}
返回:
{
"odata.metadata": "https://graph.windows.net/{tenant}/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element",
"odata.type": "Microsoft.DirectoryServices.User",
"objectType": "User",
...
"extension_917ef9adff534c858b0a683b6e6ec0f3_CreatedTime": 1518602039
}
当我使用Microsoft Graph API查询同一对象时,不会返回自定义属性。
https://graph.microsoft.com/v1.0/users/{id}/extensions
返回:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('{id}')/extensions",
"value": []
}
除非您收到更好的答案,否则我建议您使用Azure AD Graph API,并可选择使用the Azure AD Graph Client来获取和设置Azure AD B2C用户的扩展属性。
找到获取和设置用户扩展属性的示例答案 1 :(得分:1)
您可以使用Micorsoft Graph API SDK进行此操作。
请参见以下示例UserService.CreateUserWithCustomAttribute()
https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/4-WebApp-your-API/4-2-B2C
要更新自定义属性:
var updateUser = new User();
updateUser.AdditionalData = new Dictionary<string, object>();
updateUser.AdditionalData["extension_{app id}_{property name}"] = "new value";
var result = await graphClient.Users["{id}"].Request().UpdateAsync(updateUser);
上面的代码中的{app id}是默认创建的名称为b2c-extensions-app. Do not modify. Used by AADB2C for storing user data.
的应用程序的ID,但是“-”已全部删除。
答案 2 :(得分:0)
除了亚伦·霍夫曼(Aaron Hoffman)关于如何设置自定义属性的答案外,我还使用以下代码段获取我的属性:
var graphClient = new GraphServiceClient(authenticationProvider)
{
BaseUrl = "https://graph.microsoft.com/beta"
};
var user = await graphClient
.Users["{id}"]
.Request()
.GetAsync();
var field = user.AdditionalData["extension_{app id}_{property name}"];
答案 3 :(得分:0)
所以第一步是在您的自定义策略中找到
X_train.loc[indexes, 'Total day minutes'] = X_train.loc[indexes, 'Total day minutes'].str.replace(',', '.')
自定义属性被命名为extension_attributename。 要通过graphql获得它,您将需要像这样的扩展名_ {该应用的客户端ID无破折号负责存储扩展名} _ {attributename} 例如extension_57ff56e740a043fda9a38d6c1544bcf4a_mycoolattribute,您可以在代码中看到: https://github.com/Azure-Samples/ms-identity-dotnetcore-b2c-account-management/blob/master/src/Helpers/B2cCustomAttributeHelper.cs#L7-L20 图调用示例:https://graph.microsoft.com/v1.0/users/3545c38b-3f6b-4a4b-8820-e7f954a86e1e?$select=extension_57ff56e740a043fda9a38d6c1544bcf4a_mycoolattribute https://graph.microsoft.com/v1.0/users/{user-objectid}?$select=extension_57ff56e740a043fda9a38d6c1544bcf4a_mycoolattribute,extension_57ff56e740a043fda9a38d6c1544bcf4a_myotherattribute,etc