使用自定义属性在Azure AD B2C中存储有关用户的其他信息

时间:2020-08-05 07:44:50

标签: azure azure-ad-b2c azure-ad-graph-api

我想在我的Azure AD B2C实例中存储有关用户的其他信息。我所做的是:

  1. 我有created a new custom attribute,此属性的名称为Producer

  2. 我已经added all required permissions进行了新的应用程序注册,旨在通过图形API使用Azure AD B2C API

  3. 我调用Graph API来为其中一个用户设置自定义属性:POST https://graph.microsoft.com/v1.0/users/{user-id}和以下数据according to this example

    { “ officeLocation”:“ US”, “ extension_XXX_Producer”:“ AN” }

  4. 当我尝试使用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版本)

enter image description here

2 个答案:

答案 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达到要求。

请参阅:The difference between AAD Graph and Microsoft Graph

答案 1 :(得分:1)

我做了什么:

  1. 使用Azure Portal AD B2C添加自定义属性(例如Producer)

  2. 登录用户流的应用声明中添加此属性

  3. 使用Graph API列出 b2c-extensions-app的扩展属性。请勿修改。由AADB2C用于存储用户数据。 (存储自定义属性的位置,请读取https://docs.microsoft.com/en-us/azure/active-directory-b2c/extensions-apphttps://docs.microsoft.com/en-us/graph/api/resources/extensionproperty?view=graph-rest-betahttps://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'
    

    这是作为扩展属性的自定义属性的名称。

  4. 使用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);
    }
    
  5. 使用登录用户流登录时,现在在浏览器中使用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对于解决此问题有很大帮助。