我想在我的Azure AD B2C实例中存储有关用户的其他信息。我所做的是:
我有created a new custom attribute,此属性的名称为Producer
我已经added all required permissions进行了新的应用程序注册,旨在通过图形API使用Azure AD B2C API
我调用Graph API来为其中一个用户设置自定义属性:POST https://graph.microsoft.com/v1.0/users/{user-id}和以下数据according to this example
{ “ officeLocation”:“ US”, “ extension_XXX_Producer”:“ AN” }
当我尝试使用Graph API查询有关该用户的信息:GET https://graph.microsoft.com/v1.0/users/{user-id}时,没有得到类似于自定义属性的信息
在阅读Azure AD B2C documentation之后,似乎只有将自定义属性添加到用户流之一中才能激活自定义属性,但这不是我们业务所需要的。他们希望有另一个UI和产品来负责自定义属性管理,这就是为什么我想使用Graph API进行自定义属性管理的原因。
您能否向我推荐我如何在不将自定义属性包含到Azure AD B2C用户流中的情况下进行管理?
我还找到了一些建议人们使用Azure AD Graph API的资源,但是Microsoft在Azure中告诉我,该API是旧版(我已经对其进行了检查并可以使用,但是我有些担心,因为API版本):
答案 0 :(得分:2)
我查看了您提供的document example,并且注意到该示例是对Azure Active Directory Graph
的演示,因此我建议您也尝试使用Azure Active Directory图形。当您使用api查询用户信息时,它看起来像这样:
https://graph.windows.net/{tenant}.onmicrosoft.com/users/{user_id}?api-version = 1.6
在此之前,如文档所述,您需要获取api的访问令牌,并且在授予权限时,需要向应用程序授予Azure Active Directory Graph
权限。
对于AAD Graph,它是一个较旧的API,仅允许访问目录数据,并且其某些功能已从AAD Graph迁移到Microsoft Graph。但是在某些情况下,我们只能通过AAD Graph达到要求。
答案 1 :(得分:1)
我做了什么:
使用Azure Portal AD B2C添加自定义属性(例如Producer)
在登录用户流的应用声明中添加此属性
使用Graph API列出 b2c-extensions-app的扩展属性。请勿修改。由AADB2C用于存储用户数据。 (存储自定义属性的位置,请读取https://docs.microsoft.com/en-us/azure/active-directory-b2c/extensions-app,https://docs.microsoft.com/en-us/graph/api/resources/extensionproperty?view=graph-rest-beta和https://docs.microsoft.com/en-us/graph/api/application-list-extensionproperty?view=graph-rest-beta&tabs=http)。
client 是初始化的MicrosoftGraphClient, appObjectId 是 b2c-extensions-app 的 Object ID :
async function getExtensionProperties(client, appObjectId) {
return await client
.api(`/applications/${appObjectId}/extensionProperties`)
.version('beta')
.get();
}
响应应包含如下一行:
name: 'extension_<Application (client) ID of the b2c-extensions-app without the dashes>_Producer'
这是作为扩展属性的自定义属性的名称。
使用Graph API在用户上设置您的自定义属性。
id 是AD中的用户对象ID,属性是{ "extension_<Application (client) ID of the b2c-extensions-app without the dashes>_Producer": "your_value" }
async function updateUser(client, id, attributes) {
return await client
.api(`/users/${id}`)
.version('beta')
.header("content-type", "application/json")
.patch(attributes);
}
使用登录用户流登录时,现在在浏览器中使用MSAL将myMSALObj.getAccount().extension_Producer
设置为自定义属性值(注意: extension_Producer ,而扩展名和生产者之间没有应用程序ID。
amanpreetsingh-msft提供的答案https://docs.microsoft.com/en-us/answers/questions/21843/how-to-set-custom-claims-for-a-user-in-azure-ad-b2.html对于解决此问题有很大帮助。