【问题标题】:Create user with Custom Attributes in Azure AD B2C with Graph API使用 Graph API 在 Azure AD B2C 中创建具有自定义属性的用户
【发布时间】:2018-03-23 09:44:09
【问题描述】:

我正在尝试使用 Graph API 创建用户。用户 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 应用程序 ID 时,我可以插入它。我在App Registrations 下注册了一个单独的应用程序,但不确定为什么它仍在使用default b2c-extensions-app 应用程序ID。可能是因为我在App Registrations注册应用程序之前创建了自定义用户属性。

【问题讨论】:

  • 我刚刚创建了一个具有自定义属性extension_[guid]_my_attribute的用户。
  • 你读过this documentation吗?
  • 您使用的是自定义策略还是内置策略?
  • 我正在使用自定义策略。
  • 您必须在属性名称中包含“b2c-extensions-app”应用程序的应用程序 ID,因为当您在 Azure AD B2C 门户中创建用户属性时,注册的是此扩展程序应用程序Azure AD 目录的自定义属性。

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


【解决方案1】:
  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”:“extension_appguid_customattributename”)
  4. (3) 中的名称可以与命令 B2C create-user "path_to_email.json" 一起使用。在 json 中,您可以像这样添加您的属性:“extension_appguid_customattributename”:“这是一个自定义属性!”

注意:自定义属性的名称可以通过查找AAD下B2C租户中注册的App的appid(名称为:b2c-extensions-app)找到。然后,您将 extension_appid_ 附加到您的自定义属性,然后您就可以使用它了。

【讨论】:

  • 使用:B2C Get-Extension-Attribute ,您甚至可以获得所有扩展属性的列表。
【解决方案2】:

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

extension_93ae98b337124e0aaced3698b59f8acb_Role

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

【讨论】:

  • 感谢您提供的最后一点信息。我认为b2c-extension-app 是一个示例应用程序名称,并且正在使用我的一个应用程序注册 ID。这些信息对我有很大帮助。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    如果您使用内置策略,则无法控制它用于存储 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>
    

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多