【问题标题】:Azure Active Directory B2C custom validationAzure Active Directory B2C 自定义验证
【发布时间】:2018-02-01 08:59:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: azure-ad-b2c


    【解决方案1】:

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

    例如,您可能拥有以下技术资料,该资料使用社会保险号注册本地帐户:

    <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 Function(或其他外部服务)来验证注册字段。

    <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 函数返回 200 OK,则名为“AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists”的下一个验证技术配置文件会创建本地帐户,最终用户可以继续下一步。如果 Azure 函数返回 409 Conflict 并显示错误消息,则不会创建本地帐户并将错误消息显示给最终用户。

    【讨论】:

      【解决方案2】:

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

      是的,没错。

      如果验证失败会怎样? AAD 帐户会被删除吗?如果放弃验证会怎样?

      该帐户不会被删除。一种方法是添加additional attribute/claim 并在您的应用程序中检查该值。像IsValidated 这样的东西。如果!IsValidated 将用户发送给他们的Edit Profile 进行验证。

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

      【讨论】:

        猜你喜欢
        • 2018-01-24
        • 2020-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多