配置 Azure Active Directory B2C 中的密码复杂性要求

开始之前,请使用此页顶部的“选择策略类型”选择器来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。

Azure Active Directory B2C (Azure AD B2C) 支持更改由最终用户在创建帐户时提供的密码复杂性要求。 默认情况下,Azure AD B2C 使用“强”密码。 此外,Azure AD B2C 还支持用于控制客户可以使用的密码复杂性的配置选项。

先决条件

密码规则强制实施

在注册或密码重置期间,最终用户必须提供符合复杂性规则的密码。 根据用户流要求,需强制实施密码复杂性规则。 可能有一个用户流在注册期间需要一个四位数的 PIN,而另一个用户流在注册期间需要一个八字符的字符串。 例如,可以使用针对成人(而非儿童)的不同密码复杂性的用户流。

在登录期间绝不会强制实施密码复杂性。 登录时不会提示用户更改密码,因为它不符合当前的复杂性要求。

可在以下类型的用户流中配置密码复杂性:

  • 注册或登录用户流
  • 密码重置用户流

如果使用自定义策略,可以在自定义策略中配置密码复杂性

配置密码复杂性

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单中切换到你的 Azure AD B2C 租户。
  3. 在 Azure 门户中,搜索并选择“Azure AD B2C” 。
  4. 选择“用户流”
  5. 选择一个用户流,然后单击“属性” 。
  6. 在“密码复杂性” 下,将此用户流的密码复杂性更改为“简单” 、“强” 或“自定义” 。

比较图表

复杂性 说明
简单 至少包含 8 到 64 个字符的密码。
至少包含 8 到 64 个字符的密码。 它需要 4 个小写字母、大写字母、数字或符号中的 3 个。
“自定义” 此选项提供了对密码复杂性规则的最大控制。 可以配置自定义长度。 还可以接受仅为数字的密码 (pin)。

自定义选项

字符集

允许你接受仅为数字 (pin) 或完整的字符集。

  • “仅数字” 仅限输入数字 (0-9) 密码。
  • “所有” 则允许任何字母、数字或符号。

Length

允许你控制密码的长度要求。

  • 最小长度 必须至少为 4。
  • 最大长度必须大于或等于最小长度,最多可包含 256 个字符。

字符类

允许你控制密码中使用的不同字符类型。

  • 4 选 2:小写字符、大写字符、数字 (0-9)、符号确保密码包含至少两种字符类型。 例如,数字和小写字符。

  • 4 选 3:小写字符、大写字符、数字 (0-9)、符号确保密码包含至少三种字符类型。 例如,数字、小写字符和大写字符。

  • 全部 4 个:小写字符、大写字符、数字 (0-9)、符号确保密码包含所有字符类型。

    注意

    要求“全部 4 个” 可能会对最终用户造成困扰。 某些研究表明此要求不会改善密码熵。 请参阅 NIST 密码指南

密码谓词验证

若要配置密码复杂性,请使用对谓词验证的引用替代 newPasswordreenterPassword 声明类型。 PredicateValidations 元素对一组谓词进行分组,以形成可应用于声明类型的用户输入验证。 打开策略的扩展文件, 例如 SocialAndLocalAccounts/TrustFrameworkExtensions.xml

  1. 搜索 BuildingBlocks 元素。 如果该元素不存在,请添加该元素。

  2. 找到 ClaimsSchema 元素。 如果该元素不存在,请添加该元素。

  3. newPasswordreenterPassword 声明添加到 ClaimsSchema 元素。

    <!-- 
    <BuildingBlocks>
      <ClaimsSchema> -->
        <ClaimType Id="newPassword">
          <PredicateValidationReference Id="CustomPassword" />
        </ClaimType>
        <ClaimType Id="reenterPassword">
          <PredicateValidationReference Id="CustomPassword" />
        </ClaimType>
      <!-- 
      </ClaimsSchema>
    </BuildingBlocks>-->
    
  4. 谓词定义基本验证,用以检查声明类型的值并返回 true 或 false。 可通过使用指定的方法元素和与该方法相关的一组参数来完成验证。 将以下谓词添加到 BuildingBlocks 元素中,紧跟在 </ClaimsSchema> 元素结束之后:

    <!-- 
    <BuildingBlocks>-->
      <Predicates>
        <Predicate Id="LengthRange" Method="IsLengthRange">
          <UserHelpText>The password must be between 6 and 64 characters.</UserHelpText>
          <Parameters>
            <Parameter Id="Minimum">6</Parameter>
            <Parameter Id="Maximum">64</Parameter>
          </Parameters>
        </Predicate>
        <Predicate Id="Lowercase" Method="IncludesCharacters">
          <UserHelpText>a lowercase letter</UserHelpText>
          <Parameters>
            <Parameter Id="CharacterSet">a-z</Parameter>
          </Parameters>
        </Predicate>
        <Predicate Id="Uppercase" Method="IncludesCharacters">
          <UserHelpText>an uppercase letter</UserHelpText>
          <Parameters>
            <Parameter Id="CharacterSet">A-Z</Parameter>
          </Parameters>
        </Predicate>
        <Predicate Id="Number" Method="IncludesCharacters">
          <UserHelpText>a digit</UserHelpText>
          <Parameters>
            <Parameter Id="CharacterSet">0-9</Parameter>
          </Parameters>
        </Predicate>
        <Predicate Id="Symbol" Method="IncludesCharacters">
          <UserHelpText>a symbol</UserHelpText>
          <Parameters>
            <Parameter Id="CharacterSet">@#$%^&amp;*\-_+=[]{}|\\:',.?/`~"();!</Parameter>
          </Parameters>
        </Predicate>
      </Predicates>
    <!-- 
    </BuildingBlocks>-->
    
  5. 将以下谓词验证添加到 BuildingBlocks 元素中,紧跟在 </Predicates> 元素结束之后:

    <!-- 
    <BuildingBlocks>-->
      <PredicateValidations>
        <PredicateValidation Id="CustomPassword">
          <PredicateGroups>
            <PredicateGroup Id="LengthGroup">
              <PredicateReferences MatchAtLeast="1">
                <PredicateReference Id="LengthRange" />
              </PredicateReferences>
            </PredicateGroup>
            <PredicateGroup Id="CharacterClasses">
              <UserHelpText>The password must have at least 3 of the following:</UserHelpText>
              <PredicateReferences MatchAtLeast="3">
                <PredicateReference Id="Lowercase" />
                <PredicateReference Id="Uppercase" />
                <PredicateReference Id="Number" />
                <PredicateReference Id="Symbol" />
              </PredicateReferences>
            </PredicateGroup>
          </PredicateGroups>
        </PredicateValidation>
      </PredicateValidations>
    <!-- 
    </BuildingBlocks>-->
    

禁用强密码

以下技术配置文件是 Active Directory 技术配置文件,它们会在 Microsoft Entra ID 中读写数据。 在扩展文件中覆盖这些技术配置文件。 使用 PersistedClaims 禁用强密码策略。 找到 ClaimsProviders 元素。 添加以下声明提供程序,如下所示:

<!-- 
<ClaimsProviders>-->
  <ClaimsProvider>
    <DisplayName>Azure Active Directory</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
        <PersistedClaims>
          <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration, DisableStrongPassword"/>
        </PersistedClaims>
      </TechnicalProfile>
      <TechnicalProfile Id="AAD-UserWritePasswordUsingObjectId">
        <PersistedClaims>
          <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration, DisableStrongPassword"/>
        </PersistedClaims>
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
<!-- 
</ClaimsProviders>-->

如果使用基于用户名的登录策略,请使用 DisableStrongPassword 策略更新 AAD-UserWriteUsingLogonEmailAAD-UserWritePasswordUsingObjectIdLocalAccountWritePasswordUsingObjectId 技术配置文件。

保存策略文件。

测试策略

上传文件

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
  4. 选择“标识体验框架”。
  5. 在“自定义策略”页上,选择“上传策略”。
  6. 选择“覆盖策略(若存在)”,然后搜索并选择 TrustFrameworkExtensions.xml 文件。
  7. 选择“上传”。

运行策略

  1. 打开注册或登录策略,例如 B2C_1A_signup_signin。
  2. 对于“应用程序” ,选择你之前注册的应用程序。 若要查看令牌,“回复 URL”应当显示 https://jwt.ms
  3. 选择“立即运行”。
  4. 选择“立即注册”,输入电子邮件地址,并输入新密码。 密码限制中会显示相关指导。 完成输入用户信息,然后选择“创建”。 应看到返回的令牌的内容。

后续步骤