使用自定义策略的 Azure B2C 注册年龄限制

标签 azure azure-ad-b2c policies

我正在尝试使用策略而不是用户流来配置 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/

相关文章:

azure - ARM 获取 EventHub 命名空间 shareAcessPolicyKey

azure - 如何在 Azure Devops 发布管道中使用 PowerShell 设置环境变量?

powershell - 如何从 azure 获取性能计数器并写入 perfmon?

facebook - Azure B2C 与 Facebook 提供商

azure - Azure 智能锁定功能现在可用于 B2C

c# - 如何为存储帐户列表启用 AAD 身份验证?

angularjs - Angular 2+ 中的 Azure Graph/Microsoft Graph 查询

php - Laravel 中 "Resource"路由的不同策略

azure - ##[错误]找不到与参数名称 'NonComplianceMessage' 匹配的参数

json - 如何在 Azure 策略中强制实现标签值模式?