次の方法で共有


Azure Active Directory B2C でパスワード リセット フローを設定する

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

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

サインアップとサインインの過程で、ユーザーは [パスワードを忘れた場合] リンクを使用して自分のパスワードをリセットできます。 このセルフサービス パスワード リセット フローは、サインインに メール アドレス またはユーザー とパスワードを使用する Azure Active Directory B2C (Azure AD B2C) のローカル アカウントに適用されます。

ヒント

ユーザーは、パスワードを忘れてリセットする場合は、セルフサービス パスワード リセット フローを使用してパスワードを変更できます。 次のいずれかのユーザー フロー オプションを選択して、ユーザーのパスワードを変更することもできます。

  • ユーザーが自分のパスワードを知っていて、それを変更する場合は、 パスワード変更フローを使用します。
  • ユーザーにパスワードのリセットを強制する場合 (たとえば、初めてサインインしたとき、管理者によってパスワードがリセットされたとき、またはランダムなパスワードを使用して Azure AD B2C に移行された後など)、 パスワードの強制的なリセット フローを使用します。

パスワード リセット フローには、次の手順が含まれます。

  1. サインアップとサインイン ページで、ユーザーが [ パスワードを忘れた 場合] リンクを選択します。 Azure AD B2C がパスワード リセット フローを開始します。
  2. 次に表示されるダイアログで、ユーザーはメール アドレスを入力し、[ 確認コードの送信] を選択します。 Azure AD B2C は、ユーザーの電子メール アカウントに確認コードを送信します。 ユーザーが電子メールから確認コードをコピーし、Azure AD B2C パスワード リセット ダイアログにコードを入力し、[ コードの確認] を選択します。
  3. その後、ユーザーは新しいパスワードを入力できます。 (電子メールの確認後も、ユーザーは [電子メールの変更 ] ボタンを選択できます。削除する場合は、「 メールの変更ボタンを非表示にする 」を参照してください)。

パスワード リセット フローの 3 つのダイアログを示す図。

selfAsserted.html[メールの変更] ボタンの既定の名前は changeclaims です。 ボタン名を見つけるには、サインアップ ページで、Inspect などのブラウザー ツールを使用してページ ソースを 検査します。

[前提条件]

  • B2C ユーザーは、セルフサービス パスワード リセット用に認証方法を指定する必要があります。 B2C ユーザーを選択し、左側のメニューの [ 管理] で [ 認証方法] を選択します。 認証の連絡先情報が設定されていることを確認します。 サインアップ フローを使用して作成された B2C ユーザーには、既定でこの設定があります。 Azure Portal または Graph API を使用して作成されたユーザーの場合は、SSPR が機能するように 認証の連絡先情報 を設定する必要があります。

新しいパスワード リセット エクスペリエンスが、サインアップまたはサインイン ポリシーの一部になりました。 ユーザーが [ パスワードを忘れた場合] リンクを 選択すると、すぐにパスワードを忘れた場合のエクスペリエンスに送信されます。 アプリケーションで AADB2C90118エラー コードを処理する必要がなくなり、パスワードのリセットに別のポリシーは必要ありません。

セルフサービス パスワード リセット エクスペリエンスは、サインイン (推奨) またはサインアップとサインイン (推奨) ユーザー フロー用に構成できます。 これらのユーザー フローのいずれかを設定していない場合は、 サインアップまたはサインイン ユーザー フローを作成します。

サインアップまたはサインイン ユーザー フローのセルフサービス パスワード リセットを設定するには:

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. Azure portal で、 [Azure AD B2C] を検索して選択します。
  4. ユーザーフローを選択します。
  5. カスタマイズするサインアップまたはサインイン ユーザー フロー ( 推奨の種類) を選択します。
  6. [ 設定] の下のメニューで、[プロパティ] を選択 します
  7. [ パスワードの構成] で、[ セルフサービスパスワードリセット] を選択します。
  8. 保存 を選択します。
  9. 左側のメニューの [ カスタマイズ] で、[ ページ レイアウト] を選択します。
  10. [ページ レイアウト バージョン] で、2.1.3 以降を選択します。
  11. 保存 を選択します。

次のセクションでは、カスタム ポリシーにセルフサービス パスワード エクスペリエンスを追加する方法について説明します。 このサンプルは、 カスタム ポリシー スターター パックに含まれているポリシー ファイルに基づいています。

ヒント

パスワード リセット ポリシーを使用したサインアップとサインインの完全なサンプルは 、GitHub にあります

ユーザーが [ パスワードを忘れた 場合] リンクを選択したことをポリシーに示すには、ブール型要求を定義します。 要求を利用して、ユーザーのプロセスをパスワードを忘れた場合の技術プロファイルに誘導します。 要求はトークンに対して発行することもできます。そのため、アプリケーションは、パスワードを忘れたユーザー フローを使用してユーザーがサインインしたことを検出します。

要求スキーマで要求を宣言します。 ポリシーの拡張ファイル ( SocialAndLocalAccounts/TrustFrameworkExtensions.xmlなど) を開きます。

  1. BuildingBlocks 要素を検索します。 要素が存在しない場合は、追加します。

  2. ClaimsSchema 要素を見つけます。 要素が存在しない場合は、追加します。

  3. ClaimsSchema 要素に次の要求を追加します。

    <!-- 
    <BuildingBlocks>
      <ClaimsSchema> -->
        <ClaimType Id="isForgotPassword">
          <DisplayName>isForgotPassword</DisplayName>
          <DataType>boolean</DataType>
          <AdminHelpText>Whether the user has selected Forgot your Password</AdminHelpText>
        </ClaimType>
      <!--
      </ClaimsSchema>
    </BuildingBlocks> -->
    

ページ レイアウトのバージョンをアップグレードする

サインアップまたはサインインの過程でセルフサービス パスワード リセット フローを有効にするには、ページ レイアウト バージョン 2.1.2 が必要です。 ページ レイアウトのバージョンをアップグレードするには:

  1. ポリシーの基本ファイル ( SocialAndLocalAccounts/TrustFrameworkBase.xmlなど) を開きます。

  2. BuildingBlocks 要素を検索します。 要素が存在しない場合は、追加します。

  3. ContentDefinitions 要素を見つけます。 要素が存在しない場合は、追加します。

  4. ContentDefinition 要素内の DataURI 要素を変更して、ID をapi.signuporsigninします。

    <!-- 
    <BuildingBlocks>
      <ContentDefinitions> -->
        <ContentDefinition Id="api.signuporsignin">
          <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.2</DataUri>
        </ContentDefinition>
      <!-- 
      </ContentDefinitions>
    </BuildingBlocks> -->
    

技術プロファイルを追加する

要求変換技術プロファイルは、 isForgotPassword 要求にアクセスします。 技術プロファイルは後で参照されます。 呼び出されると、 isForgotPassword 要求の値が trueに設定されます。

  1. ポリシーの拡張ファイル ( SocialAndLocalAccounts/TrustFrameworkExtensions.xmlなど) を開きます。
  2. ClaimsProviders 要素を見つけて (要素が存在しない場合は作成します)、次のクレーム プロバイダーを追加します。
<!-- 
<ClaimsProviders> -->
  <ClaimsProvider>
    <DisplayName>Local Account</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="ForgotPassword">
        <DisplayName>Forgot your password?</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="true" AlwaysUseDefaultValue="true"/>
        </OutputClaims>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
      </TechnicalProfile>
      <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
        <Metadata>
          <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
        </Metadata>
      </TechnicalProfile>
      <TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
<!-- 
</ClaimsProviders> -->

SelfAsserted-LocalAccountSignin-Email 技術プロファイルの setting.forgotPasswordLinkOverride によって、ユーザー体験で実行されるパスワードのリセット要求の交換が定義されています。

LocalAccountWritePasswordUsingObjectId 技術プロファイル UseTechnicalProfileForSessionManagementSM-AAD セッション マネージャーは、ユーザーが SSO 条件下で後続のログインを正常に実行するために必要です。

パスワードリセットのサブプロセスを追加する

これで、ユーザーはサインインし、サインアップし、ユーザー体験でパスワードのリセットを実行できるようになりました。 ユーザー体験をより適切に整理するために、 サブ体験 を使用してパスワード リセット フローを処理できます。

サブ体験はユーザー体験から呼び出され、パスワード リセット エクスペリエンスをユーザーに提供する特定の手順を実行します。 サブ体験が完了すると、サブ体験を開始したオーケストレーション ステップに制御が返されるように、 Call タイプのサブ体験を使用します。

  1. SocialAndLocalAccounts/TrustFrameworkExtensions.xmlなど、ポリシーの拡張ファイルを開きます。
  2. SubJourneys 要素を検索します。 要素が存在しない場合は、 User Journeys 要素の後に追加します。 次に、次のサブ旅程を追加します。
<!--
<SubJourneys>-->
  <SubJourney Id="PasswordReset" Type="Call">
    <OrchestrationSteps>
      <!-- Validate user's email address. -->
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- Collect and persist a new password. -->
      <OrchestrationStep Order="2" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
        </ClaimsExchanges>
      </OrchestrationStep>
    </OrchestrationSteps>
  </SubJourney>
<!--
</SubJourneys>-->

ユーザー体験を準備する

次に、パスワードを忘れたリンクをパスワードを忘れたサブジャーニーに接続するには、CombinedSignInAndSignUpステップのClaimsProviderSelection要素でパスワードを忘れたサブジャーニーIDを参照する必要があります。

CombinedSignInAndSignUp ステップを持つ独自のカスタム ユーザー体験がない場合は、次の手順を実行して、既存のサインアップまたはサインイン ユーザー体験を複製します。 それ以外の場合は、次のセクションに進みます。

  1. スターター パックで、SocialAndLocalAccounts/TrustFrameworkBase.xmlなどの TrustFrameworkBase.xml ファイルを開きます。
  2. を含む Id="SignUpOrSignIn" 要素の内容全体を検索してコピーします。
  3. SocialAndLocalAccounts/TrustFrameworkExtensions.xml などのTrustFrameworkExtensions.xmlファイルを開き、UserJourneys 要素を見つけます。 要素が存在しない場合は、作成します。
  4. 手順 2 でコピーした UserJourney 要素の内容全体を貼り付けることで 、UserJourneys 要素の子要素を作成します。
  5. ユーザージャーニーのIDをリネームします。 たとえば、Id="CustomSignUpSignIn" のようにします。

ユーザージャーニーでは、パスワードを忘れた場合のサブジャーニーを ClaimsProviderSelection として表すことができます。 この要素を追加すると、[ パスワードを忘れた場合] リンクを [パスワードを忘れた場合] サブ体験に接続できます。

  1. SocialAndLocalAccounts/TrustFrameworkExtensions.xmlなどの TrustFrameworkExtensions.xml ファイルを開きます。

  2. ユーザー体験で、 Type="CombinedSignInAndSignUp" または Type="ClaimsProviderSelection"を含むオーケストレーション ステップ要素を見つけます。 通常は、オーケストレーションの最初の手順です。 ClaimsProviderSelections 要素には、ユーザーがサインインに使用できる ID プロバイダーの一覧が含まれています。 次の行を追加します。

    <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
    
  3. 次のオーケストレーション手順で、次の行を追加して ClaimsExchange 要素を追加します。

    <ClaimsExchange Id="ForgotPasswordExchange" TechnicalProfileReferenceId="ForgotPassword" />
    
  4. 現在の手順と次の手順の間に、次のオーケストレーション ステップを追加します。 追加する新しいオーケストレーション 手順では、 isForgotPassword 要求が存在するかどうかを確認します。 請求がある場合は、パスワード リセット サブプロセスを呼び出します。

    <OrchestrationStep Order="3" Type="InvokeSubJourney">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>isForgotPassword</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <JourneyList>
        <Candidate SubJourneyReferenceId="PasswordReset" />
      </JourneyList>
    </OrchestrationStep>
    
  5. 新しいオーケストレーション ステップを追加した後、1 から N までの整数をスキップせずに、ステップの番号を順番に変更します。

実行するユーザー体験を設定する

ユーザー体験を変更または作成したので、[ 証明書利用者 ] セクションで、このカスタム ポリシーに対して Azure AD B2C が実行する体験を指定します。

  1. Relying Party 要素を含むファイル (SocialAndLocalAccounts/SignUpOrSignin.xml など) を開きます。

  2. RelyingParty 要素で、DefaultUserJourney 要素を見つけます。

  3. ClaimsProviderSelections を追加したユーザー体験の ID と一致するように、DefaultUserJourney ReferenceId を更新します。

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

アプリへのパスワードを忘れた場合のフローを示す

アプリケーションでは、ユーザーがパスワードを忘れたユーザー フローを使用してサインインしたかどうかを検出する必要がある場合があります。 isForgotPassword 要求には、それが行ったことを示すブール値が含まれています。 要求は、アプリケーションに送信されるトークンで発行できます。 必要に応じて、証明書利用者セクションの出力要求に isForgotPassword を追加します。 アプリケーションは isForgotPassword 要求を確認して、ユーザーが自分のパスワードをリセットしたかどうかを判断できます。

<RelyingParty>
  <OutputClaims>
    ...
    <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="false" />
  </OutputClaims>
</RelyingParty>

カスタム ポリシーをアップロードする

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合は、上部メニューの [設定] アイコンを選択して、[ ディレクトリ + サブスクリプション ] メニューから Azure AD B2C テナントに切り替えます。
  3. Azure portal で、 [Azure AD B2C] を検索して選択します。
  4. [ポリシー] の下 メニューで、[ Identity Experience Framework] を選択します。
  5. [ カスタム ポリシーのアップロード] を選択します。 次の順序で、変更したポリシー ファイルをアップロードします。
    1. ポリシーの基本ファイル (TrustFrameworkBase.xmlなど )。
    2. 拡張ポリシー (例: TrustFrameworkExtensions.xml
    3. 証明書利用者ポリシー (例: SignUpSignIn.xml)。

[メールの変更] ボタンを非表示にする (省略可能)

メールが確認された後も、ユーザーは [メールの変更] を選択し、別のメール アドレスを入力してから、電子メールの確認を繰り返すことができます。 [メールの変更] ボタンを非表示にする場合は、ダイアログで関連付けられている HTML 要素を非表示にするように CSS を変更できます。 たとえば、次の CSS エントリを追加して selfAsserted.html し、 HTML テンプレートを使用してユーザー インターフェイスをカスタマイズできます。

<style type="text/css">
   .changeClaims
   {
     visibility: hidden;
   }
</style>

パスワード リセット フローをテストする

  1. テストするサインアップまたはサインイン ユーザー フロー (推奨される種類) を選択します。
  2. ユーザー フローを実行する を選択します。
  3. [アプリケーション] で、先ほど登録した webapp1 という名前の Web アプリケーションを選択します。 応答 URLhttps://jwt.msが表示されます。
  4. ユーザー フローを実行する を選択します。
  5. サインアップまたはサインイン ページで、[ パスワードを忘れた場合] を選択します。
  6. 前に作成したアカウントのメール アドレスを確認し、[ 続行] を選択します。
  7. 表示されるダイアログで、ユーザーのパスワードを変更し、[ 続行] を選択します。 トークンが https://jwt.ms に返され、ブラウザーに表示されます。
  8. 戻りトークンの isForgotPassword 要求値を確認します。 存在し、 trueに設定されている場合、ユーザーはパスワードをリセットします。

パスワード リセット ポリシー (レガシ)

セルフサービス パスワード リセット エクスペリエンスが有効になっていない場合、このリンクを選択しても、パスワード リセット ユーザー フローは自動的にトリガーされません。 代わりに、エラー コード AADB2C90118 がアプリケーションに返されます。 アプリケーションでは、Azure AD B2C パスワード リセット ユーザー フローを認証するために認証ライブラリを再初期化することで、このエラー コードを処理する必要があります。

次の図は、プロセスを示しています。

  1. アプリケーションで、ユーザーが [サインイン] を選択します。 アプリは承認要求を開始し、ユーザーがサインインを完了できるように Azure AD B2C にリダイレクトします。 承認要求では、サインアップまたはサインイン ポリシー名 (B2C_1_signup_signinなど) 指定します。
  2. ユーザーが [パスワードを 忘れた場合 ] リンクを選択します。 Azure AD B2C は、 AADB2C90118 エラー コードをアプリケーションに返します。
  3. アプリケーションはエラー コードを処理し、新しい承認要求を開始します。 承認要求では、パスワード リセット ポリシー名 (B2C_1_pwd_resetなど) 指定します。

従来のパスワード リセット ユーザー フローと番号付き手順を示す図。

ASP.NET サンプルでは、ユーザー フローのリンクの基本的なデモンストレーションを確認できます。

パスワード リセット ユーザー フローを作成する

アプリケーション ユーザーが自分のパスワードをリセットできるようにするには、パスワード リセット ユーザー フローを作成します。

  1. Azure portal で、Azure AD B2C テナントの概要に移動します。
  2. 左側のメニューの [ ポリシー] で、[ ユーザー フロー] を選択し、[ 新しいユーザー フロー] を選択します。
  3. [ ユーザー フローの作成] で、 パスワード リセット ユーザー フローを選択します。
  4. [ バージョンの選択] で [ 推奨] を選択し、[ 作成] を選択します。
  5. [名前] に、ユーザー フローの名前を入力します。 たとえば、 passwordreset1 です。
  6. ID プロバイダーの場合は、ユーザー名を使用したパスワードのリセットまたは電子メール アドレスを使用したパスワードのリセットを有効にします。
  7. [ 多要素認証] で、ユーザーに 2 つ目の認証方法を使用して ID の確認を要求する場合は、方法の種類と多要素認証を適用するタイミングを選択します。 詳細については、こちらを参照してください
  8. [条件付きアクセス] で、Azure AD B2C テナントの条件付きアクセス ポリシーを構成していて、それをこのユーザー フローで使用する場合は、[条件付きアクセス ポリシーの適用] チェック ボックスをオンにします。 ポリシー名を指定する必要はありません。 詳細については、こちらを参照してください
  9. [ アプリケーション要求] で、[ 詳細を表示] を選択します。 アプリケーションに返送される承認トークンで返される要求を選択します。 たとえば、[ ユーザーのオブジェクト ID] を選択します
  10. [OK] を選択.
  11. [ 作成] を選択してユーザー フローを追加します。 B2C_1のプレフィックスが自動的に名前に追加されます。

ユーザー フローをテストする

ユーザー フローをテストするには:

  1. 作成したユーザー フローを選択します。 ユーザー フローの概要ページで、 [ ユーザー フローの実行] を選択します。
  2. [アプリケーション] で、テストする Web アプリケーション (前に登録した場合は webapp1 という名前のアプリケーションなど) を選択します。 応答 URLhttps://jwt.msする必要があります。
  3. [ ユーザー フローの実行] を選択し、パスワードをリセットするアカウントのメール アドレスを確認して、[ 続行] を選択します。
  4. パスワードを変更し、[ 続行] を選択します。 トークンが https://jwt.ms に返され、ブラウザーに表示されます。

パスワード リセット ポリシーを作成する

カスタム ポリシーは、ユーザー体験を定義するために Azure AD B2C テナントにアップロードする XML ファイルのセットです。 サインアップとサインイン、パスワードのリセット、プロファイル編集ポリシーなど、事前構築済みのポリシーを持つ スターター パック が用意されています。 詳細については、「 Azure AD B2C でのカスタム ポリシーの概要」を参照してください。

Azure AD B2C ユーザー フローとカスタム ポリシーのトラブルシューティング

アプリケーションでは、Azure B2C サービスからの特定のエラーを処理する必要があります。 Azure AD B2C のユーザー フローとカスタム ポリシーのトラブルシューティングを行う方法について説明します

パスワードの強制リセットを設定します。

埋め込みパスワードのリセットを使用したサインアップとサインイン