Azure Active Directory B2C でパスワードの複雑さの要件を構成する

"開始する前に"、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。

Azure Active Directory B2C (Azure AD B2C) では、アカウントの作成時にエンド ユーザーが指定するパスワードの複雑さの要件の変更がサポートされます。 既定では、Azure AD B2C では強力なパスワードを使います。 Azure AD B2C では、顧客が使用できるパスワードの複雑さを制御する構成オプションもサポートしています。

前提条件

パスワード ルールの適用

サインアップ時またはパスワードのリセット時に、エンド ユーザーは、複雑さのルールを満たすパスワードを指定する必要があります。 パスワードの複雑さのルールはユーザー フローごとに適用されます。 あるユーザー フローがサインアップ時に 4 桁の PIN を要求し、別のユーザー フローがサインアップ時に 8 文字の文字列を要求することができます。 たとえば、大人と子供とで異なるパスワードの複雑さを持つユーザー フローを使用できます。

パスワードの複雑さは、サインイン時には適用されません。 ユーザーは、現在の複雑さの要件を満たしていないためにサインイン時にパスワードの変更を求められることはありません。

パスワードの複雑さは次の種類のユーザー フローで構成できます。

  • サインアップまたはサインインのユーザー フロー
  • パスワード リセットのユーザー フロー

カスタム ポリシーを使用している場合、(カスタム ポリシーでパスワードの複雑さを構成する) ことができます。

パスワードの複雑さの構成

  1. Azure portal にサインインします。
  2. ご自分の Azure AD B2C テナントが含まれるディレクトリを必ず使用してください。 ポータル ツールバーの [Directories + subscriptions](ディレクトリ + サブスクリプション) アイコンを選択します。
  3. [ポータルの設定] | [Directories + subscriptions](ディレクトリ + サブスクリプション) ページの [ディレクトリ名] の一覧で自分の Azure AD B2C ディレクトリを見つけて、 [切り替え] を選択します。
  4. Azure portal で、 [Azure AD B2C] を検索して選択します。
  5. [ユーザー フロー] を選択します。
  6. ユーザー フローを選択し、 [プロパティ] をクリックします。
  7. [パスワードの複雑さ] で、このユーザー フローのパスワードの複雑さを [シンプル][強][カスタム] のいずれかに変更します。

比較チャート

複雑さ 説明
シンプル 少なくとも 8 ~ 64 文字のパスワード。
Strong 少なくとも 8 ~ 64 文字のパスワード。 小文字、大文字、数字、記号の 4 種類のうち 3 種が必要です。
Custom このオプションでは、パスワードの複雑さのルールを最も細かく制御できます。 カスタムの長さを構成できます。 数字のみのパスワード (PIN) を受け入れることもできます。

カスタム オプション

文字セット

数字のみ (PIN) または完全な文字セットを受け入れることができます。

  • [数字のみ] では、パスワードを入力するときに数字 (0 ~ 9) のみを使用できます。
  • [すべて] では、任意の文字、数字、記号を使用できます。

長さ

パスワードの長さの要件を制御できます。

  • [最短] は、少なくとも 4 にする必要があります。
  • [最大長] は最小の長さ以上で、最大 256 文字にすることができます。

文字クラス

パスワードで使われる異なる文字の種類を制御できます。

  • [2 of 4:Lowercase character, Uppercase character, Number (0-9), Symbol](3/4: 小文字、大文字、数字 (0 ~ 9)、記号) では、パスワードに少なくとも 3 種類の文字が含まれることを保証します。 たとえば、数値と小文字です。

  • 3 of 4:Lowercase character, Uppercase character, Number (0-9), Symbol (次の 4 つの文字クラスのうち 3 つ - 大文字、小文字、数字 (0 から 9)、記号) では、パスワードに少なくとも 3 種類の文字が含まれることを保証します。 たとえば、数値、小文字、大文字です。

  • 4 of 4:Lowercase character, Uppercase character, Number (0-9), Symbol(4/4: 小文字、大文字、数字 (0 ~ 9)、記号) では、パスワードにすべての文字種が含まれることを保証します。

    注意

    4/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>-->
    

強力なパスワードを無効にする

次の技術プロファイルは、Azure Active Directory へのデータの読み取りと書き込みを行う Active Directory 技術プロファイルです。 拡張ファイル内のこれらの技術プロファイルをオーバーライドします。 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>-->

ユーザー名ベースのサインイン ポリシーを使用する場合は、AAD-UserWriteUsingLogonEmailAAD-UserWritePasswordUsingObjectId、および LocalAccountWritePasswordUsingObjectId 技術プロファイルをDisableStorongPassword ポリシーを使用して更新します。

ポリシー ファイルを保存します。

ポリシーのテスト

ファイルのアップロード

  1. Azure portal にサインインします。
  2. ご自分の Azure AD B2C テナントが含まれるディレクトリを必ず使用してください。 ポータル ツールバーの [Directories + subscriptions](ディレクトリ + サブスクリプション) アイコンを選択します。
  3. [ポータルの設定] | [Directories + subscriptions](ディレクトリ + サブスクリプション) ページで Azure AD B2C ディレクトリを [ディレクトリ名] リストで見つけ、 [Switch] を選択します。
  4. Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。
  5. [Identity Experience Framework] を選択します。
  6. [カスタム ポリシー] ページで、 [ポリシーのアップロード] をクリックします。
  7. [ポリシーが存在する場合は上書きする] を選択し、TrustFrameworkExtensions.xml ファイルを検索して選択します。
  8. [アップロード] をクリックします。

ポリシーを実行する

  1. サインアップまたはサインイン ポリシーを開きます。 たとえば、B2C_1A_signup_signin などです。
  2. [アプリケーション] には、前に登録したアプリケーションを選択します。 トークンを表示するには、 [応答 URL]https://jwt.ms が表示される必要があります。
  3. [今すぐ実行] をクリックします。
  4. [今すぐサインアップ] を選択し、メール アドレスを入力して、新しいパスワードを入力します。 パスワード制限に関するガイダンスが表示されます。 ユーザー情報の入力を終了して、[作成] をクリックします。 返されたトークンの内容が表示されます。

次のステップ