共用方式為


使用 Azure AD B2C 在 WPF 傳統型應用程式中啟用驗證選項

這很重要

自 2025 年 5 月 1 日起,Azure AD B2C 將不再可供新客戶購買。 在我們的常見問題中深入瞭解

本文說明您可以針對 Windows Presentation Foundation (WPF) 傳統型應用程式自定義和增強 Azure Active Directory B2C (Azure AD B2C) 驗證體驗的方式。

開始之前,請先熟悉 使用 Azure AD B2C 在範例 WPF 傳統型應用程式中設定驗證 一文。

預先填入登入名稱

在登入使用者旅程圖期間,您的應用程式可能會以特定用戶為目標。 當應用程式以用戶為目標時,可以在授權要求 login_hint 中指定具有使用者登入名稱的查詢參數。 Azure AD B2C 會自動填入登入名稱,而且使用者只需要提供密碼。

若要預填登入名稱,請執行以下步驟:

  1. 如果您使用自定義原則,請新增必要的輸入宣告,如 設定直接登入中所述。
  2. 尋找您的 Microsoft 驗證庫 (MSAL) 設定物件,然後加入包含登入提示的 withLoginHint() 方法。
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithLoginHint("bob@contoso.com")
    .ExecuteAsync();

預先選取識別提供者

如果您將應用程式的登入旅程設定為包含社交帳戶,例如 Facebook、LinkedIn 或 Google,您可以指定 domain_hint 參數。 此查詢參數會針對應該用於登入的社交識別提供者,提供 Azure AD B2C 的提示。 例如,如果應用程式指定 domain_hint=facebook.com,則登入流程會直接移至 Facebook 登入頁面。

若要將使用者重新導向至外部識別提供者,請執行下列動作:

  1. 檢查您的外部身份提供者的網域名稱。 如需詳細資訊,請參閱 將登入重新導向至社交提供者
  2. 建立或使用現有的 Dictionary 對象來儲存額外的查詢參數。
  3. domain_hint將具有對應網域名稱的參數新增至字典(例如, facebook.com
  4. 將額外的查詢參數對象傳遞至 MSAL 組態物件的 WithExtraQueryParameters 方法。
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("domain_hint", "facebook.com");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

指定UI語言

Azure AD B2C 中的語言自定義可讓您的使用者流程適應各種語言,以符合客戶需求。 如需詳細資訊,請參閱 語言自定義

若要設定慣用的語言,請執行下列動作:

  1. 設定語言自定義
  2. 建立或使用現有的 Dictionary 對象來儲存額外的查詢參數。
  3. ui_locales將具有對應語言程式代碼的參數新增至字典(例如, en-us
  4. 將額外的查詢參數對象傳遞至 MSAL 組態物件的 WithExtraQueryParameters 方法。
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("ui_locales", "en-us");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

傳遞自訂查詢字串參數

使用自定義原則,您可以傳遞自定義查詢字串參數。 良好的使用案例範例是當您想要 動態變更頁面內容時。

若要傳遞自訂查詢字串參數,請執行下列動作:

  1. 設定 ContentDefinitionParameters 元素。
  2. 建立或使用現有的 Dictionary 對象來儲存額外的查詢參數。
  3. 新增自訂查詢字串參數,例如 campaignId。 設定參數值 (例如 , germany-promotion)。
  4. 將額外的查詢參數對象傳遞至 MSAL 組態物件的 WithExtraQueryParameters 方法。
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("campaignId", "germany-promotion");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

傳遞 ID 令牌提示

信賴方應用程式可以在 OAuth2 授權要求中傳送入境 JSON Web 令牌(JWT)。 輸入令牌提供有關用戶或授權請求的線索。 Azure AD B2C 會驗證令牌,然後擷取聲明。

若要在驗證要求中包含識別元令牌提示,請執行下列動作:

  1. 在您的自定義原則中,定義 ID 令牌提示技術設定檔
  2. 在您的程式代碼中,產生或取得識別元令牌,然後將令牌設定為變數(例如 , 。 idToken
  3. 建立或使用現有的 Dictionary 對象來儲存額外的查詢參數。
  4. 新增 id_token_hint 參數,其中使用儲存 ID 令牌的對應變數。
  5. 將額外的查詢參數對象傳遞至 MSAL 組態物件的 extraQueryParameters 屬性。
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("id_token_hint", idToken);

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

設定日誌記錄

MSAL 連結庫會產生可協助診斷問題的記錄訊息。 應用程式可以設定記錄。 應用程式也可以讓您自定義控制詳細數據層級,以及是否記錄個人和組織數據。

建議您設置 MSAL 日誌回呼,並提供一種方式讓使用者在遇到驗證問題時提交日誌。 MSAL 提供下列記錄層級詳細資料:

  • 錯誤:發生問題,並產生錯誤。 此層級用於偵錯和識別問題。
  • 警告:不一定發生錯誤或失敗,但資訊適用於診斷和找出問題。
  • 資訊:MSAL 會記錄用於資訊用途的事件,而不一定用於偵錯。
  • 詳細資訊:這是預設級別。 MSAL 會記錄程式庫行為的完整詳細資訊。

根據預設,MSAL 記錄器不會擷取任何個人或組織數據。 如果您決定這麼做,程式庫會讓您選擇是否啟用個人和組織數據的記錄功能。

下列代碼段示範如何設定 MSAL 記錄:

PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
    .WithB2CAuthority(AuthoritySignUpSignIn)
    .WithRedirectUri(RedirectUri)
    .WithLogging(Log, LogLevel.Info, false) // don't log P(ersonally) I(dentifiable) I(nformation) details on a regular basis
    .Build();

設定重新導向 URI

傳統型應用程式註冊 程式期間,當您選擇重新導向 URI 時,請記住下列重要考慮:

  • 開發:若要在傳統型應用程式中使用開發,您可以將重新導向 URI 設定為 http://localhost,而 Azure AD B2C 會遵守要求中的任何埠。 如果已註冊的 URI 包含埠,Azure AD B2C 只會使用該埠。 例如,如果已註冊的重新導向 URI 是 http://localhost,則要求中的重新導向 URI 可以是 http://localhost:<randomport>。 如果已註冊的重新導向 URI 是 http://localhost:8080,要求中的重新導向 URI 必須是 http://localhost:8080
  • 一:重新導向 URI 的配置對於每個應用程式而言都必須是唯一的。 在範例 com.onmicrosoft.contosob2c.exampleapp://oauth/redirect中, com.onmicrosoft.contosob2c.exampleapp 是配置。 應該遵循此模式。 如果兩個應用程式共用相同的配置,使用者就會選擇應用程式。 如果使用者選擇不正確,登入就會失敗。
  • 完成:重新導向 URI 必須同時具有配置和路徑。 路徑必須在網域後面至少包含一個斜線字元。 例如, //oauth/ 運作正常且 //oauth 失敗。 請勿在 URI 中包含特殊字元。 例如,不允許底線字元 (_) 。

後續步驟