這很重要
自 2025 年 5 月 1 日起,Azure AD B2C 將不再可供新客戶購買。 在我們的常見問題中深入瞭解。
開始之前,請使用此頁面頂端的 [選擇原則類型] 選取器,選擇您要設定的原則類型。 Azure Active Directory B2C 提供兩種方法來定義使用者如何與您的應用程式互動:透過預先定義的使用者流程,或透過完全可設定的自訂原則。 此文章中所需的步驟隨各方法而異。
在註冊和登入過程中,用戶可以使用忘記密碼?連結來重設自己的密碼。 此自助式密碼重設流程適用於 Azure Active Directory B2C (Azure AD B2C) 中的本機帳戶,這些帳戶使用 電子郵件位址 或 用戶名 和密碼進行登入。
小提示
如果使用者忘記密碼並想要重設密碼,則可以使用自助式密碼重設流程來變更其密碼。 您也可以選擇下列其中一個使用者流程選項來變更使用者的密碼:
密碼重設流程牽涉到下列步驟:
- 在註冊和登入頁面上,用戶選取 [ 忘記密碼嗎? ] 連結。 Azure AD B2C 會起始密碼重設流程。
- 在下一個出現的對話框中,使用者輸入其電子郵件地址,然後選取 [ 傳送驗證碼]。 Azure AD B2C 會將驗證碼傳送至使用者的電子郵件帳戶。 使用者從電子郵件複製驗證碼、在 [Azure AD B2C 密碼重設] 對話框中輸入代碼,然後選取 [ 驗證碼]。
- 然後,使用者可以輸入新的密碼。 (驗證電子郵件之後,使用者仍然可以選取 [ 變更電子郵件 ] 按鈕;如果您想要移除 變更電子郵件按鈕,請參閱隱藏變更電子郵件按鈕 。
selfAsserted.html 中 [變更電子郵件] 按鈕的預設名稱是 changeclaims。 若要尋找按鈕名稱,請在註冊頁面上,使用 [ 檢查] 等瀏覽器工具來檢查頁面來源。
先決條件
- 建立使用者流程,讓使用者能夠註冊並登入您的應用程式。
- 註冊 Web 應用程式。
- 完成開始使用 Active Directory B2C 中的自定義原則中的步驟。 本教學課程會引導您更新自定義原則檔案,以使用您的 Azure AD B2C 租用戶設定。
- 註冊 Web 應用程式。
- B2C 用戶必須指定自助式密碼重設的驗證方法。 選取 B2C 使用者,在左側功能表中的 [ 管理] 底下,選取 [驗證方法]。 確定已設定 驗證聯繫人資訊 。 透過註冊流程建立的 B2C 用戶預設會設定此設定。 針對透過 Azure 入口網站或 Graph API 建立的使用者,您必須設定 SSPR 的 驗證連絡資訊 才能運作。
自助式密碼重設(建議)
新的密碼重設體驗現在是註冊或登入原則的一部分。 當使用者選取 [忘記密碼?] 連結時,系統會立即將他們傳送至忘記密碼體驗。 您的應用程式不再需要處理 AADB2C90118錯誤碼,而且您不需要個別的原則來重設密碼。
自助式密碼重設體驗可以針對 [登入] 或 [建議] 或 [註冊和登入] 使用者流程進行設定。 如果您沒有其中一個使用者流程設定,請建立 註冊或登入 使用者流程。
若要設定註冊或登入使用者流程的自助式密碼重設:
- 登入 Azure 入口網站。
- 如果您有多個租用戶的存取權,請使用頂端功能表中的 [設定] 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租用戶。
- 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]。
- 選取 [使用者流程]。
- 選取您要自訂的註冊或登入使用者流程(類型為 [建議] 。
- 在 [ 設定] 下的功能表中,選取 [ 屬性]。
- 在 [密碼設定] 底下,選取 [自助式密碼重設]。
- 選取 [儲存]。
- 在左側功能表的 [自定義] 下,選取 [版面配置]。
- 在 [版面配置版本] 中,選取 [2.1.3 ] 或更新版本。
- 選取 [儲存]。
下列各節說明如何將自助式密碼體驗新增至自定義原則。 此範例是以 自定義原則入門套件中包含的原則檔案為基礎。
小提示
您可以在 GitHub 上找到註冊和使用密碼重設原則登入的完整範例。
表示用戶已選取「忘記密碼」連結
若要指示用戶選取 [忘記密碼嗎?] 鏈接的原則,請定義布爾宣告。 使用宣告將使用者旅程導向 至忘記密碼 技術配置檔。 宣告也可以發送到令牌中,因此應用程式會偵測到使用者是透過忘記密碼的使用流程登入的。
在 宣告架構中宣告您的宣告。 在 SocialAndLocalAccounts/TrustFrameworkExtensions.xml中開啟您的原則的擴充套件檔案。
搜尋 BuildingBlocks 元素。 如果元素不存在,加以新增。
找出 ClaimsSchema 元素。 如果元素不存在,加以新增。
將下列宣告新增至 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,才能在註冊或登入過程中啟用密碼自助重設流程。 若要升級版面配置版本:
開啟原則的基底檔案,例如 SocialAndLocalAccounts/TrustFrameworkBase.xml。
搜尋 BuildingBlocks 元素。 如果元素不存在,加以新增。
找出 ContentDefinitions 元素。 如果元素不存在,加以新增。
修改 ContentDefinition 元素內的 DataURI 元素,以具有識別碼
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
。
- 在 SocialAndLocalAccounts/TrustFrameworkExtensions.xml中開啟您的原則的擴充套件檔案。
- 尋找 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 技術設定檔設定.forgotPasswordLinkOverride 定義了在您的使用者流程中執行的密碼重設宣告交換流程。
為了讓使用者在 SSO 條件下成功執行後續登入,需要 UseTechnicalProfileForSessionManagementSM-AAD
會話管理員中使用的 LocalAccountWritePasswordUsingObjectId 技術配置檔。
新增密碼重設子流程
用戶現在可以在使用者旅程中登入、註冊和執行密碼重設。 若要更妥善地組織使用者旅程圖,您可以使用 子旅程 來處理密碼重設流程。
子旅程圖會從使用者旅程圖呼叫,並執行將密碼重設體驗傳遞給使用者的特定步驟。 使用Call
類型的子旅程,當子旅程完成時,控制權會被傳回至起始該子旅程的協調步驟。
- 開啟您的原則的擴充套件檔案,例如 SocialAndLocalAccounts/TrustFrameworkExtensions.xml。
- 尋找 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元素中參考忘記密碼子旅程標識符。
如果您沒有具有 CombinedSignInAndSignUp 步驟的自定義使用者旅程圖,請完成下列步驟來複製現有的註冊或登入使用者旅程圖。 否則,請繼續進行下一節。
- 在入門套件中,開啟 TrustFrameworkBase.xml 檔案,例如 SocialAndLocalAccounts/TrustFrameworkBase.xml。
- 尋找並複製包含 之
Id="SignUpOrSignIn"
元素的整個內容。 - 開啟 TrustFrameworkExtensions.xml 檔案,例如 SocialAndLocalAccounts/TrustFrameworkExtensions.xml,並尋找 UserJourneys 元素。 如果元素不存在,請建立它。
- 貼上您在步驟 2 中複製之 UserJourney 元素的整個內容,以建立 UserJourneys 元素的子元素。
- 重新命名使用者旅程的標識碼。 例如:
Id="CustomSignUpSignIn"
。
將 [忘記密碼] 鏈接連接至 [忘記密碼] 子流程
在您的使用者旅程圖中,您可以將 [忘記密碼] 子旅程圖表示為 ClaimsProviderSelection。 藉由新增此元素,您會將 [忘記密碼? ] 鏈接連接到 [忘記密碼] 子旅程圖。
開啟 TrustFrameworkExtensions.xml 檔案,例如 SocialAndLocalAccounts/TrustFrameworkExtensions.xml。
在使用者旅程圖中,尋找包含
Type="CombinedSignInAndSignUp"
或Type="ClaimsProviderSelection"
的協調流程步驟元素。 通常是第一個編排流程步驟。 ClaimsProviderSelections 元素包含用戶可用來登入的識別提供者清單。 新增下列這一行:<ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
在下一個協調流程步驟中,新增 ClaimsExchange 元素,方法是新增下列這一行:
<ClaimsExchange Id="ForgotPasswordExchange" TechnicalProfileReferenceId="ForgotPassword" />
在目前步驟和下一個步驟之間新增下列協調流程步驟。 您新增的新協調流程步驟會檢查 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>
新增協調流程步驟之後,請循序重新編號步驟,而不需要略過從 1 到 N 的任何整數。
設定要執行的使用者流程
既然您已修改或建立使用者歷程,請在 信賴方 區段中指定 Azure AD B2C 針對此自定義原則要執行的使用者歷程。
開啟具有 信賴憑證者 元素的檔案,例如 SocialAndLocalAccounts/SignUpOrSignin.xml。
在 RelyingParty 元素中,尋找 DefaultUserJourney 元素。
更新 DefaultUserJourney ReferenceId ,以符合您新增 ClaimsProviderSelections 的使用者旅程圖標識符。
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
在您的應用程式中指示忘記密碼的操作流程。
您的應用程式可能需要偵測使用者是否使用忘記密碼使用者流程登入。 isForgotPassword 宣告包含布爾值,指出是否已重設密碼。 宣告可以在傳送至應用程式的令牌中發出。 如有必要,請將 isForgotPassword 新增至 信賴憑證者 區段中的輸出宣告。 您的應用程式可以檢查 isForgotPassword 宣告,以判斷使用者是否重設其密碼。
<RelyingParty>
<OutputClaims>
...
<OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="false" />
</OutputClaims>
</RelyingParty>
上傳自定義原則
- 登入 Azure 入口網站。
- 如果您有多個租戶的存取權,請選取頂端功能表中的設定圖示,從目錄 + 訂閱功能表切換至 Azure AD B2C 租戶。
- 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]。
- 在 [ 原則] 下的功能表中,選取 [ 身分識別體驗架構]。
- 選取 上傳自定義政策。 依下列順序,上傳您變更的原則檔案:
- 原則的基底檔案,例如 TrustFrameworkBase.xml。
- 例如,擴充原則 TrustFrameworkExtensions.xml。
- 例如,信賴方政策SignUpSignIn.xml。
隱藏變更電子郵件按鈕 (選擇性)
驗證電子郵件之後,使用者仍然可以選取 [變更電子郵件]、輸入另一個電子郵件地址,然後重複電子郵件驗證。 如果您要隱藏 [變更電子郵件 ] 按鈕,您可以修改 CSS 來隱藏對話框中相關聯的 HTML 元素。 例如,您可以將下列 CSS 專案新增至 selfAsserted.html 並使用 HTML 範本自定義使用者介面:
<style type="text/css">
.changeClaims
{
visibility: hidden;
}
</style>
測試密碼重設流程
- 選取您想要測試的註冊或登入使用者流程(建議類型)。
- 選取執行使用者流程。
- 針對 [應用程式],選取您稍早註冊的 Web 應用程式名為 webapp1 。
Reply URL 應顯示
https://jwt.ms
。 - 選取執行使用者流程。
- 在 [註冊或登入] 頁面上,選取 [ 忘記密碼?]。
- 確認您稍早建立之帳戶的電子郵件地址,然後選取 [ 繼續]。
- 在顯示的對話框中,變更使用者的密碼,然後選取 [ 繼續]。 令牌會傳回給
https://jwt.ms
,瀏覽器會顯示它。 - 檢查傳回令牌的 isForgotPassword 宣告值。 如果存在且 設定為
true
,則使用者已重設密碼。
密碼重設原則 (舊版)
如果未啟用 自助式密碼重設 體驗,選取此連結不會自動觸發密碼重設使用者流程。 相反地,錯誤碼 AADB2C90118
會傳回至您的應用程式。 您的應用程式必須重新初始化驗證連結庫,以驗證 Azure AD B2C 密碼重設使用者流程,以處理此錯誤碼。
下圖描述此程式:
- 在應用程式中,用戶選取 [ 登入]。 應用程式會起始授權要求,並重新導向至 Azure AD B2C,讓使用者完成登入。 授權要求會指定註冊或登入原則名稱,例如 B2C_1_signup_signin。
- 用戶選取 [ 忘記密碼嗎?] 連結。 Azure AD B2C 會將
AADB2C90118
錯誤碼傳回給應用程式。 - 應用程式會處理錯誤碼並起始新的授權要求。 授權要求會指定密碼重設原則名稱,例如 B2C_1_pwd_reset。
您可以在 我們的 ASP.NET 範例中看到使用者流程連結的基本示範。
建立密碼重設使用者流程
若要讓您的應用程式使用者重設其密碼,請建立密碼重設使用者流程:
- 在 Azure 入口網站中,移至 Azure AD B2C 租使用者概觀。
- 在左側功能表的 [ 原則] 底下,選取 [ 使用者流程],然後選取 [ 新增使用者流程]。
- 在 [建立使用者流程] 中,選取 [密碼重設 使用者流程]。
- 在 [ 選取版本] 底下,選取 [ 建議],然後選取 [ 建立]。
- 針對 [名稱],輸入使用者流程的名稱。 例如 ,passwordreset1。
- 針對 識別提供者, 使用使用者名稱啟用重設密碼 ,或使用 電子郵件位址重設密碼。
- 在 [多重要素驗證] 底下,如果您想要要求使用者使用第二個驗證方法來驗證其身分識別,請選取方法類型,以及何時強制執行多重要素驗證。 深入瞭解。
- 在 [條件式存取] 下,如果您已為 Azure AD B2C 租使用者設定條件式存取原則,而且您想要在此使用者流程中使用它們,請選取 [ 強制執行條件式存取原則 ] 複選框。 您不需要指定原則名稱。 深入瞭解。
- 在 [應用程式宣告] 下,選取 [顯示更多]。 選擇您要在授權令牌中傳回的宣告,這些宣告會傳回給您的應用程式。 例如,選取 [使用者的對象標識符]。
- 請選擇 [確定]。
- 選取 [建立] 以新增使用者流程。 B2C_1前置詞會自動新增至名稱。
測試使用者流程
若要測試使用者流程:
- 選取您建立的使用者流程。 在 [使用者流程概觀] 頁面上,選取 [ 執行使用者流程]。
- 針對 [應用程式],選取您想要測試的 Web 應用程式,例如您稍早註冊的 Webapp1 。
回覆 URL 應該是
https://jwt.ms
。 - 選取 [執行使用者流程],確認您要重設密碼之帳戶的電子郵件地址,然後選取 [ 繼續]。
- 變更密碼,然後選取 [ 繼續]。 令牌會傳回給
https://jwt.ms
,瀏覽器會顯示它。
建立密碼重設原則
自訂原則是一組 XML 檔案,可上傳至 Azure AD B2C 租戶以定義使用者旅程。 我們提供具有數個預先建置原則的 入門套件 ,包括註冊和登入、密碼重設和配置檔編輯原則。 如需詳細資訊,請參閱 開始使用 Azure AD B2C 中的自定義原則。
針對 Azure AD B2C 使用者流程和自定義原則進行疑難解答
您的應用程式必須處理來自 Azure B2C 服務的特定錯誤。 瞭解如何針對 Azure AD B2C 的使用者流程和自定義原則進行疑難解答。
相關內容
設定 強制密碼重設。