我正在尝试使用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-up
和edit-profile
政策以及声明。
注意:我为图API提供了适当的权限,并在应用注册门户网站上注册了应用。
答案:我找到了答案。但不确定这是否是正确的行为。当我用b2c-extensions-app
app id附加自定义属性时,我可以插入自定义属性。我在App Registrations
下注册了一个单独的应用,但不确定为什么它仍在使用default b2c-extensions-app
应用ID。可能是因为我在App Registrations
注册应用之前创建了自定义用户属性。
答案 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)
注意:通过查找在AAD下的B2C租户中注册的应用程序的appid,可以找到自定义属性的名称(它的名称为:b2c-extensions-app)。然后,将extension_appid_附加到自定义属性,然后就可以使用它了。
答案 2 :(得分:0)
如果您使用内置政策,则无法控制用于存储custom attributes的应用。
如果您正在使用custom policies,see 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)
您需要为其中一个注册策略启用这些属性(显示它们)(自定义或不自定义),并通过该策略创建一个具有为其设置值的帐户。在您完成此操作之前,它们将无法在该租户和目录中使用。