在我的应用程序中,我尝试使用自定义用户属性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"/>
但是,由于这是在基本文件中,因此它被所有登录流共享,这将阻止我为不同的注册流设置不同的值。
为这种双重注册流程建模的正确方法是什么?
答案 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
分开引用。