我正在尝试使用策略而不是用户流来配置 B2C 租户。为此,我使用 SocialAndLocalAccount模板作为起始基础。
在注册页面中,我添加了一个自定义声明来询问用户他/她的出生日期。如果用户提供的日期使他/她未成年(+18),我想显示一条验证失败的消息(就像您可以使用谓词设置的那样)并阻止用户通过以下方式注册创建按钮被禁用。
到目前为止,这就是我所得到的:
-我创建了两个新声明来存储一个 bool 值,该值可以告诉我用户是否未成年,第二个声明用于存储当前时间。
<ClaimType Id="systemDateTime">
<DisplayName>Today's date</DisplayName>
<DataType>dateTime</DataType>
</ClaimType>
<ClaimType Id="isNotUnderAge">
<DisplayName>Indicates whether user being under age or not</DisplayName>
<DataType>boolean</DataType>
<AdminHelpText>User must be over 18</AdminHelpText>
</ClaimType>
我添加了 ClaimsTransformation 以获取当前日期并将其与所选日期进行比较 ( date comparison ):
<!-- Check user under age -->
<ClaimsTransformation Id="GetSystemDateTime" TransformationMethod="GetCurrentDateTime">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="systemDateTime" TransformationClaimType="currentDateTime" />
</OutputClaims>
</ClaimsTransformation>
<ClaimsTransformation Id="CheckBirthDateIsNotUnderAge" TransformationMethod="DateTimeComparison">
<InputClaims>
<InputClaim ClaimTypeReferenceId="birthDate" TransformationClaimType="firstDateTime" />
<InputClaim ClaimTypeReferenceId="systemDateTime" TransformationClaimType="secondDateTime" />
</InputClaims>
<InputParameters>
<InputParameter Id="operator" DataType="string" Value="later than" />
<InputParameter Id="timeSpanInSeconds" DataType="int" Value="568025136" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="isNotUnderAge" TransformationClaimType="result" />
</OutputClaims>
</ClaimsTransformation>
到目前为止,我想我也许能够判断用户是否未成年。从现在开始,我不知道如何继续才能实现我的目标。我一直在阅读文档,但没有找到解决方案,并且我不确定这是否是最好的方法。
您是否遇到过类似的限制?如果是这样,实现此目标的最佳方法是什么?我在哪里可以找到帮助我解决问题的提示?
非常感谢!
编辑1:
我找到了this question这解释了类似的问题(如果不相同),这让我问自己,是否可以通过使用 ClaimsTransformations 和 Predicates 来实现这一目标,或者 REST API 是获得预期结果的唯一方法吗?
最佳答案
看来您的想法是正确的,只要您想全面禁止 18 岁以下的所有用户。一种选择是您可以使用验证技术配置文件来调用 AssertBooleanClaimIsEqualToValue 转换,这将在签名上显示自定义错误消息 -如果用户未满 18 岁并且不会让他们继续,则会在页面中显示。请参阅Microsoft Documentation: Boolean Claim Transformations例如。
如果您确实希望“继续”按钮变灰,可以将 isNotUnderage
显示为只读声明并使用 CSS 隐藏它,然后使用 JS 根据按钮的值将其变灰。
第三个选项是在向用户展示您的注册选项之前添加一个 OrchestrationStep
,如果用户年满 18 岁,则可以跳过该先决条件,这将显示您可以设置的新的 self 断言技术配置文件显示错误消息(只是段落声明)并从中删除继续按钮。这里的缺点是,它要求您在向用户提供注册选项之前收集他们的年龄,这可能会使事情变得复杂。
关于使用自定义策略的 Azure B2C 注册年龄限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61608152/