首页 > 解决方案 > Azure AD B2C:在本地注册期间保留声明的默认值

问题描述

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

我想要一类用户,说“客户”通过移动应用程序注册,不需要提供角色字段,只需在幕后默认为“客户”。第二类用户将使用网络应用程序注册,我希望他们能够从下拉列表中选择角色,例如“支持”、“管理员”等......我的计划是提供两个版本SignUpOrSignin.xml来处理这个问题。

使用 Microsoft 在启动包中提供的示例策略文件,我在其中定义了我的自定义ClaimType(没有UserInputTypeTrustFrameworkBase.xml并配置了客户端和对象 ID。我还修改了AAD-UserWriteUsingLogonEmail TechnicalProfile以坚持索赔。

我坚持实际上坚持一个默认值。我试过添加:

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

to SignUpOrSignin.xml,但是当我运行流程时,单击注册后会收到 500 错误。我认为这是因为它期望该extension_Role字段应该由用户填写。

我能够坚持的唯一方法extension_Role是将其添加到LocalAccountSignUpWithLogonEmail TechnicalProfilein TrustFrameworkBase.xml。例如:

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

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

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

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

解决方案


您必须指定UserInputType何时使用自断言技术配置文件从用户那里收集信息。请参阅此处的参考。这就是您收到 500 错误的原因。

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

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

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

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


推荐阅读