azure-active-directory - Azure AD B2C:在本地注册期间保留声明的默认值
问题描述
在我的应用程序中,我尝试使用自定义用户属性 ,extension_Role
该属性应在注册期间保留给用户。
我想要一类用户,说“客户”通过移动应用程序注册,不需要提供角色字段,只需在幕后默认为“客户”。第二类用户将使用网络应用程序注册,我希望他们能够从下拉列表中选择角色,例如“支持”、“管理员”等......我的计划是提供两个版本SignUpOrSignin.xml
来处理这个问题。
使用 Microsoft 在启动包中提供的示例策略文件,我在其中定义了我的自定义ClaimType
(没有UserInputType
)TrustFrameworkBase.xml
并配置了客户端和对象 ID。我还修改了AAD-UserWriteUsingLogonEmail
TechnicalProfile
以坚持索赔。
我坚持实际上坚持一个默认值。我试过添加:
<OutputClaim ClaimTypeReferenceId="extension_Role" AlwaysUseDefaultValue="true" DefaultValue="Customer" />
to SignUpOrSignin.xml
,但是当我运行流程时,单击注册后会收到 500 错误。我认为这是因为它期望该extension_Role
字段应该由用户填写。
我能够坚持的唯一方法extension_Role
是将其添加到LocalAccountSignUpWithLogonEmail
TechnicalProfile
in TrustFrameworkBase.xml
。例如:
<OutputClaim ClaimTypeReferenceId="extension_Role" DefaultValue="Customer"/>
但是,由于这在基本文件中,它由所有登录流程共享,这将阻止我为不同的注册流程设置不同的值。
对这种双重注册流程建模的正确方法是什么?
解决方案
您必须指定UserInputType
何时使用自断言技术配置文件从用户那里收集信息。请参阅此处的参考。这就是您收到 500 错误的原因。
请注意,您在SignUpOrSignin.xml
( <OutputClaim ClaimTypeReferenceId="extension_Role" AlwaysUseDefaultValue="true" DefaultValue="Customer" />
) 中设置的声明将仅在您当时注册后返回。自定义属性不会存储到 Azure AD 中。这意味着当您想稍后查询自定义属性时,您将找不到它。
因此,您必须在基本策略文件中设置 的值,extension_Role
而不是SignUpOrSignin.xml
.
在这个场景中,您应该定义两个 TechnicalProfile LocalAccountSignUpWithLogonEmail
,一个接受用户输入,另一个为您的自定义声明设置 DefaultValue。
然后将它们与您的两个分开引用SignUpOrSignin.xml
。
推荐阅读
- css - 具有不同字体系列和行高的 CSS Bulma
- java - Java 有异常的麻烦。一个例外不允许我更正我的输入,而另一个例外
- firemonkey - 当我尝试放置圆角时,TRectangle 上的黑色边框
- reactjs - 将formik与material-table集成的好方法是什么?
- docker - 如何使用官方 Tensorflow docker 容器在主机目录中保存和编辑 Jupyter 笔记本?
- typescript - 将 ngif 应用到挂载的组件后不渲染子组件
- c++ - 字符串初始化问题解释
- php - 在 WordPress 中使用 register_theme_directory 进行主题迭代
- swift - CollectionView 中的 CollectionView:使用 didSelectItemAt 执行Segue
- c - 为什么 C 语言 4 个字节上出现一个 char 字符