Azure Active Directory B2C 自定义验证

Azure Active Directory B2C custom validation

如何在 AAD B2C 流程中执行自定义用户验证?

即 我们有一个具有各种属性的用户数据库 我们想使用B2C进行用户认证 我们需要确保注册的用户与我们数据库中的现有用户正确匹配 他们可以访问敏感信息,所以这非常重要 在注册过程中,我们希望用户填写他们的详细信息,但我们需要能够根据我们的数据库检查其中一些详细信息,如果他们没有正确填写详细信息,则注册失败。 例如。匹配 DoB、社会安全号码、地址等

这是实现我们所想的正确方法吗? https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-rest-api-validation-custom

如果验证失败会怎样? AAD 帐户会被删除吗? 如果放弃验证会怎样? B2C 中有一个“首次登录”标志,如果验证失败并且用户重试会发生什么,这个标志是如何设置的以及谁控制它?

Is this the right way to achieve what we are thinking? https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-rest-api-validation-custom

是的,没错。

What happens if validation fails ? Will the AAD account be deleted? What happens if validation is abandoned?

该帐户不会被删除。一种方法是添加 additional attribute/claim 并在您的应用中检查该值。类似于 IsValidated。如果 !IsValidated 将用户从他们那里发送到 Edit Profile 以进行验证。

Edit Profile 用户旅程期间,如果用户输入更正的值,则 IsValidated 会设置为 true

或者,您可以创建一个验证技术配置文件,它封装了由帐户注册技术配置文件执行的属性验证。

例如,您可能有以下技术资料,它使用社会安全号码注册了一个本地帐户:

<TechnicalProfile Id="LocalAccount-Registration">
  <DisplayName>Local Account Registration</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">api.localaccount.registration</Item>
    <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
    <Item Key="language.button_continue">Create</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="TokenSigningKeyContainer" />
  </CryptographicKeys>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
    <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
    <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
    <OutputClaim ClaimTypeReferenceId="displayName" Required="true" />
    <OutputClaim ClaimTypeReferenceId="extension_SocialSecurityNumber" Required="true" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
    <OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
    <OutputClaim ClaimTypeReferenceId="newUser" />
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="sub" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AzureFunctions-CheckCustomer" />
    <ValidationTechnicalProfile ReferenceId="AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists" />
  </ValidationTechnicalProfiles>
  <UseTechnicalProfileForSessionManagement ReferenceId="SSOSession-AzureActiveDirectory" />
</TechnicalProfile>

名为 "AzureFunctions-CheckCustomer" 的第一个验证技术配置文件在最终用户提交注册表单时执行,调用 Azure 函数(或其他外部服务)来验证注册字段。

<TechnicalProfile Id="AzureFunctions-CheckCustomer">
  <DisplayName>Check Customer Azure Function</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ServiceUrl">https://contoso.azurewebsites.net/api/CheckCustomer?code=...</Item>
    <Item Key="AuthenticationType">None</Item>
    <Item Key="SendClaimsIn">Body</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="extension_SocialSecurityNumber" PartnerClaimType="socialSecurityNumber" />
  </InputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SSOSession-Noop" />
</TechnicalProfile>

如果 Azure 函数 returns 200 OK,则下一个名为 "AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists" 的验证技术配置文件会创建本地帐户,最终用户可以继续下一步。如果 Azure Function returns 409 与错误消息冲突,则不会创建本地帐户并将错误消息显示给最终用户。