使用 Azure AD B2C 在 WPF 傳統型應用程式中啟用驗證選項
此文章描述數種方式,讓您可用來自訂和增強 Windows Presentation Foundation (WPF) 桌面應用程式的 Azure Active Directory B2C (Azure AD B2C) 驗證體驗。
開始之前,請先熟悉使用 Azure AD B2C 在範例 WPF 傳統型應用程式中設定驗證文章。
預先填入登入名稱
在登入使用者旅程圖中,您的應用程式可能會將特定使用者當作目標。 當應用程式將使用者當作目標時,可在授權要求中指定 login_hint
查詢參數與使用者的登入名稱。 Azure AD B2C 會自動填入登入名稱,而使用者只需提供密碼。
若要預先填入登入名稱,請執行下列動作:
- 如果您使用自訂原則,請新增必要的輸入宣告,如設定直接登入中所述。
- 尋找您的 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 登入頁面。
若要將使用者重新導向至外部識別提供者,請執行下列動作:
- 檢查外部識別提供者的網域名稱。 如需詳細資訊,請參閱將登入重新導向至社交提供者。
- 建立或使用現有的
Dictionary
物件來儲存額外的查詢參數。 - 將具有對應網域名稱的
domain_hint
參數新增至字典 (例如facebook.com
)。 - 將額外的查詢參數物件傳遞至 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 中的語言自訂,可讓您的使用者流程容納各種不同語言,以符合客戶的需求。 如需詳細資訊,請參閱語言自訂。
若要設定慣用語言,請執行下列動作:
- 設定語言自訂。
- 建立或使用現有的
Dictionary
物件來儲存額外的查詢參數。 - 將具有對應語言代碼的
ui_locales
參數新增至字典 (例如en-us
)。 - 將額外的查詢參數物件傳遞至 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();
傳遞自訂查詢字串參數
使用自訂原則,您可以傳遞自訂查詢字串參數。 想要以動態方式變更頁面內容,就是個良好的使用案例範例。
若要傳遞自訂查詢字串參數,請執行下列動作:
- 設定 ContentDefinitionParameters 元素。
- 建立或使用現有的
Dictionary
物件來儲存額外的查詢參數。 - 新增自訂查詢字串參數,例如
campaignId
。 設定參數值 (例如germany-promotion
)。 - 將額外的查詢參數物件傳遞至 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 會驗證權杖,然後擷取宣告。
若要在驗證要求中包含識別碼權杖提示,請執行下列動作:
- 在您的自訂原則中,定義識別碼權杖提示技術設定檔。
- 在您的程式碼中,產生或取得識別碼權杖,然後將權杖設定為變數 (例如
idToken
)。 - 建立或使用現有的
Dictionary
物件來儲存額外的查詢參數。 - 使用儲存識別碼權杖的對應變數來新增
id_token_hint
參數。 - 將額外的查詢參數物件傳遞至 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 中包含特殊字元。 例如,不允許使用底線字元 (_)。
後續步驟
- 若要深入了解,請參閱 MSAL for .NET、UWP、NetCore 和 Xamarin 設定選項。