Azure AD B2C:在本地注册期间保留声明的默认值

时间:2020-02-06 12:41:17

标签: azure-active-directory azure-ad-b2c

在我的应用程序中,我尝试使用自定义用户属性extension_Role,该属性应在注册过程中保留给用户。

我想要一类用户,说“客户”来通过移动应用程序进行注册,而无需提供“角色”字段,只需将其默认设置为“客户”即可。第二类用户将使用Web应用程序进行注册,我希望他们能够从下拉菜单中选择角色,例如“支持”,“管理员”等。我的计划是提供SignUpOrSignin.xml的两个版本来解决这个问题。

使用Microsoft在starter pack中提供的示例策略文件,我在ClaimType中定义了自定义UserInputType(无TrustFrameworkBase.xml)并配置了客户端和对象ID 。我还修改了AAD-UserWriteUsingLogonEmail TechnicalProfile以保留该主张。

我一直坚持使用默认值。我尝试添加:

<OutputClaim ClaimTypeReferenceId="extension_Role" AlwaysUseDefaultValue="true" DefaultValue="Customer" />

SignUpOrSignin.xml,但是当我运行流程时,单击“注册”后出现500错误。我认为这是因为期望extension_Role字段应由用户填写。

我能够持久保存extension_Role的唯一方法是将其添加到LocalAccountSignUpWithLogonEmail中的TechnicalProfile TrustFrameworkBase.xml中。例如:

<OutputClaim ClaimTypeReferenceId="extension_Role" DefaultValue="Customer"/>

但是,由于这是在基本文件中,因此它被所有登录流共享,这将阻止我为不同的注册流设置不同的值。

为这种双重注册流程建模的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

使用自行声明的技术资料从用户那里收集信息时,必须指定UserInputType。请参阅参考文献here。这就是为什么您会得到500错误的原因。

请注意,您在SignUpOrSignin.xml(使用<OutputClaim ClaimTypeReferenceId="extension_Role" AlwaysUseDefaultValue="true" DefaultValue="Customer" />)中设置的声明只会在您注册后返回。自定义属性不会存储到Azure AD中。这意味着当您以后想要查询自定义属性时,将找不到它。

因此,您必须在基本策略文件中设置extension_Role的值,而不是SignUpOrSignin.xml

在这个场景中,您应该为LocalAccountSignUpWithLogonEmail定义两个TechnicalProfile,一个接受用户输入,另一个为您的自定义声明设置DefaultValue。

然后将它们与您的两个SignUpOrSignin.xml分开引用。