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

此文章描述數種方式,讓您可用來自訂和增強 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();

傳遞識別碼權杖提示

信賴憑證者應用程式可以將輸入 JSON Web 權杖 (JWT) 放入 OAuth2 授權要求中傳送。 輸入權杖是關於使用者或授權要求的提示。 Azure AD B2C 會驗證權杖,然後擷取宣告。

若要在驗證要求中包含識別碼權杖提示,請執行下列動作:

  1. 在您的自訂原則中,定義識別碼權杖提示技術設定檔
  2. 在您的程式碼中,產生或取得識別碼權杖,然後將權杖設定為變數 (例如 idToken)。
  3. 建立或使用現有的 Dictionary 物件來儲存額外的查詢參數。
  4. 使用儲存識別碼權杖的對應變數來新增 id_token_hint 參數。
  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 中包含特殊字元。 例如,不允許使用底線字元 (_)。

後續步驟