使用图谱API {Azure}在Azure AD B2C中创建具有自定义属性的用户

时间:2017-10-11 16:08:26

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

我正在尝试使用Graph API创建用户。 user json对象如下所示。我创建了一个名为Role的自定义属性。因此,在创建用户时,我需要为此Role提供一些价值。但如果我包含这个自定义属性,我会收到错误。

  

一个或多个属性无效

如果我没有指定此自定义属性,则“创建用户”成功。

 var jsonObject = new JObject
            {
                {"accountEnabled", true},
                {"country", "India"},
                {"creationType", "LocalAccount"},
                {"givenName","given"},
                {"surName","surname"},
                {"extension_Role","Admin"},
                {"displayName","test12@xxx.com"},
                {"passwordPolicies", "DisablePasswordExpiration,DisableStrongPassword"},
                {"passwordProfile", new JObject
                {
                    {"password", "Password@12"},
                    {"forceChangePasswordNextLogin", false}
                } },
                {"signInNames", new JArray
                    {
                        new JObject
                        {
                            {"value", "test12@xxx.com"},
                            {"type", "emailAddress"}
                        }
                    }
                }
            };

extension_Role是抛出错误的属性。我试着给extension_appId_Role。它给出了一个不同的错误

  

此名称不存在扩展属性

我想我们在创建用户时无法添加自定义属性。只有我们可以使用编辑个人资料更新它们如果我错了,请纠正我。我已将此自定义属性添加到sign-upedit-profile政策以及声明。

注意:我为图API提供了适当的权限,并在应用注册门户网站上注册了应用。

答案:我找到了答案。但不确定这是否是正确的行为。当我用b2c-extensions-app app id附加自定义属性时,我可以插入自定义属性。我在App Registrations下注册了一个单独的应用,但不确定为什么它仍在使用default b2c-extensions-app应用ID。可能是因为我在App Registrations注册应用之前创建了自定义用户属性。

4 个答案:

答案 0 :(得分:2)

正如评论中所指出的,您需要在属性名称中指定前缀extension_b2c-extensions-app应用ID。应用程序ID是GUID,但必须包含在没有连字符的情况下,例如

extension_93ae98b337124e0aaced3698b59f8acb_Role

通过在Azure AD B2C租户内的Azure门户中选择b2c-extension-app,可以找到All Resources -> App Registrations ID。默认情况下,它显示My apps的列表;将下拉列表更改为All apps,然后点击b2c-extension-app并复制其Application ID

答案 1 :(得分:2)

  1. https://github.com/AzureADQuickStarts/B2C-GraphAPI-DotNet获取B2C应用程序,并使用您的b2c租户的值更新app.config。 (有关设置和使用B2C的详细信息,请参阅:https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet。)
  2. 运行B2C Get-B2C-Application:复制“objectId”的值(朝向输出的顶部)。
  3. 运行B2C Get-Extension-Attribute objectid(其中objectid是您在步骤(2)中捕获的内容)。其输出将具有每个自定义属性的name属性(例如:“name”:“extension_appguid_customattributename”)
  4. 使用命令B2C create-user“path_to_email.json”可以使用(3)中的名称。在json中,你添加你的属性如下:“extension_appguid_customattributename”:“这是一个自定义属性!”
  5. 注意:通过查找在AAD下的B2C租户中注册的应用程序的appid,可以找到自定义属性的名称(它的名称为:b2c-extensions-app)。然后,将extension_appid_附加到自定义属性,然后就可以使用它了。

答案 2 :(得分:0)

如果您使用内置政策,则无法控制用于存储custom attributes的应用。

如果您正在使用custom policiessee this guide来配置用于存储自定义属性的应用。

<ClaimsProviders>
    <ClaimsProvider>
          <DisplayName>Azure Active Directory</DisplayName>
        <TechnicalProfile Id="AAD-Common">
          <DisplayName>Azure Active Directory</DisplayName>
          <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          <!-- Provide objectId and appId before using extension properties. -->
          <Metadata>
            <Item Key="ApplicationObjectId">insert objectId here</Item>
            <Item Key="ClientId">insert appId here</Item>
          </Metadata>
        <!-- End of changes -->
          <CryptographicKeys>
            <Key Id="issuer_secret" StorageReferenceId="TokenSigningKeyContainer" />
          </CryptographicKeys>
          <IncludeInSso>false</IncludeInSso>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
        </TechnicalProfile>
    </ClaimsProvider>
</ClaimsProviders>

答案 3 :(得分:0)

您需要为其中一个注册策略启用这些属性(显示它们)(自定义或不自定义),并通过该策略创建一个具有为其设置值的帐户。在您完成此操作之前,它们将无法在该租户和目录中使用。