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

Azure active directory Azure AD B2C:在本地注册期间为声明保留默认值,azure-active-directory,azure-ad-b2c,Azure Active Directory,Azure Ad B2c,在我的应用程序中,我试图使用一个自定义的用户属性,extension\u Role,该属性应该在注册期间保存给用户 我想要一类用户,比如说“Customer”,通过移动应用程序注册,不需要提供角色字段,只需在后台将其默认为“Customer”。第二类用户将使用web应用程序注册,我希望他们能够从下拉列表中选择角色,如“支持”、“管理员”等。。。我的计划是提供两个版本的SignUpOrSignin.xml来处理这个问题 使用Microsoft在中提供的示例策略文件,我已在TrustFramewor

在我的应用程序中,我试图使用一个自定义的用户属性,
extension\u Role
,该属性应该在注册期间保存给用户

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

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

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

<OutputClaim ClaimTypeReferenceId="extension_Role" AlwaysUseDefaultValue="true" DefaultValue="Customer" />
但是,由于这是在基本文件中,所以它由所有登录流共享,这将阻止我为不同的注册流设置不同的值


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

当您使用自断言的技术配置文件从用户收集信息时,必须指定
UserInputType
。见参考资料。这就是为什么你会得到500个错误

请注意,您在
SignUpOrSignin.xml
(使用
)中设置的声明将仅在您当时注册后返回。自定义属性将不会存储到Azure AD中。这意味着当您以后要查询自定义属性时,将找不到它

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

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


然后将它们与您的两个
SignUpOrSignin.xml

分开引用,重点是我不希望在所有情况下都接受用户的输入。在一个流中,我希望该值为默认值,而不希望用户能够输入它。在另一个流中,我希望用户输入值。@Tim Yes。我完全不理解你描述的情景。正如我在回答中所建议的,您需要从您的
SignUpOrSignin.xml
中参考
LocalAccountSignUpWithLogonEmail
的技术文件。既然您有了两个版本的
SignUpOrSignin.xml
,那么在基本策略文件中也可以有两个版本的
LocalAccountSignUpWithLogonEmail
技术文件。一个接受用户输入,另一个为自定义声明设置DefaultValue。
<OutputClaim ClaimTypeReferenceId="extension_Role" DefaultValue="Customer"/>