2

Azure AD B2C 自定义策略验证失败,并且没有提及导致验证错误的原因。

在我将简单的 companyName 字符串添加到注册过程之前,我已经为我的应用程序定义了自定义策略,并且一切正常。我按照本指南中详述的步骤添加了一个在注册时收集的字段。在成功上传 TrustFrameworkBase 策略后,我在上传 singup_signing 自定义策略时遇到了问题。它告诉我

验证失败:在租户“xxxxx”的策略“B2C_1A_SIGNUP_SIGNIN”中发现 1 个验证错误。策略“B2C_1A_signup_signin”的 Azure Active Directory 提供程序技术配置文件“AAD-UserReadUsingObjectId”不支持输出声明“companyName”。如果是具有默认值的声明,请将 AlwaysUseDefaultValue="true" 添加到输出声明映射中。

所以我按照建议做了,并将 AlwaysUseDefaultValue="true" 和 DefaultValue="" 属性添加到“AAD-UserReadUsingObjectId”技术配置文件中的 OutputClaim 中。这使我能够成功上传策略文件。

但是,当我测试 signup_signin 策略时,我收到一条消息,说明

无法验证提供的信息。

我也为此租户设置了 Application Insights,并看到同样模糊的错误消息

返回的错误是 400/Request_BadRequest:指定的一个或多个属性值无效。

我将声明类型添加到 FrameworkBase 中的声明模式

<ClaimType Id="companyName">
  <DisplayName>Company</DisplayName>
  <DataType>string</DataType>
  <UserHelpText>Your company</UserHelpText>
  <UserInputType>TextBox</UserInputType>
</ClaimType>

我将 PersistedClaim 添加到 TechnicalProfile 'AAD-UserWriteUsingLogonEmail' <PersistedClaim ClaimTypeReferenceId="companyName" />

我将 OutputClaim 添加到 TechnicalProfiles 'AAD-UserReadUsingEmailAddress' <OutputClaim ClaimTypeReferenceId="companyName" /> 和 'AAD-UserReadUsingObjectId' <OutputClaim ClaimTypeReferenceId="companyName" AlwaysUseDefaultValue="true" DefaultValue="" />

我也将 OutputClaim 添加到了 signup_signin.xml <OutputClaim ClaimTypeReferenceId="companyName" />

我希望用户已成功注册,但会收到上面的验证错误

4

1 回答 1

1

该示例使用“城市”。

“您的 Azure AD B2C 目录带有一组内置属性。例如 Given Name、Surname、City、Postal Code 和 userPrincipalName。”

所以“城市”在模式中。

我从错误中假设“companyName”不是。

要添加它,您可以使用自定义属性

所以它将是“extension_companyName”。

于 2019-07-24T19:54:47.250 回答