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" />
我希望用户已成功注册,但会收到上面的验证错误