Włączanie opcji uwierzytelniania w aplikacji klasycznej WPF przy użyciu Azure AD B2C
W tym artykule opisano sposoby dostosowywania i ulepszania środowiska uwierzytelniania usługi Azure Active Directory B2C (Azure AD B2C) dla aplikacji klasycznej Windows Presentation Foundation (WPF).
Przed rozpoczęciem zapoznaj się z artykułem Konfigurowanie uwierzytelniania w przykładowej aplikacji klasycznej WPF przy użyciu Azure AD B2C.
Podczas podróży użytkownika logowania aplikacja może być skierowana do określonego użytkownika. Gdy aplikacja jest przeznaczona dla użytkownika, może określić w żądaniu login_hint
autoryzacji parametr zapytania z nazwą logowania użytkownika. Azure AD B2C automatycznie wypełnia nazwę logowania, a użytkownik musi podać tylko hasło.
Aby wstępnie wypełniać nazwę logowania, wykonaj następujące czynności:
- Jeśli używasz zasad niestandardowych, dodaj wymagane oświadczenie wejściowe zgodnie z opisem w temacie Konfigurowanie logowania bezpośredniego.
- Poszukaj obiektu konfiguracji biblioteki Microsoft Authentication Library (MSAL), a następnie dodaj metodę
withLoginHint()
z wskazówką logowania.
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithLoginHint("bob@contoso.com")
.ExecuteAsync();
Jeśli skonfigurowano logowanie dla aplikacji tak, aby obejmowała konta społecznościowe, takie jak Facebook, LinkedIn lub Google, możesz określić domain_hint
parametr . Ten parametr zapytania zawiera wskazówkę dla Azure AD B2C o dostawcy tożsamości społecznościowych, który powinien być używany do logowania. Jeśli na przykład aplikacja określa domain_hint=facebook.com
wartość , przepływ logowania przechodzi bezpośrednio do strony logowania w serwisie Facebook.
Aby przekierować użytkowników do zewnętrznego dostawcy tożsamości, wykonaj następujące czynności:
- Sprawdź nazwę domeny zewnętrznego dostawcy tożsamości. Aby uzyskać więcej informacji, zobacz Przekierowywanie logowania do dostawcy społecznościowego.
- Utwórz istniejący obiekt lub użyj go
Dictionary
do przechowywania dodatkowych parametrów zapytania. -
domain_hint
Dodaj parametr z odpowiednią nazwą domeny do słownika (na przykładfacebook.com
). - Przekaż obiekt dodatkowych parametrów zapytania do metody obiektu konfiguracji biblioteki
WithExtraQueryParameters
MSAL.
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();
Dostosowywanie języka w usłudze Azure AD B2C umożliwia przepływowi użytkownika dostosowanie różnych języków do potrzeb klientów. Aby uzyskać więcej informacji, zobacz Dostosowywanie języka.
Aby ustawić preferowany język, wykonaj następujące czynności:
- Konfigurowanie dostosowywania języka.
- Utwórz istniejący obiekt lub użyj go
Dictionary
do przechowywania dodatkowych parametrów zapytania. -
ui_locales
Dodaj parametr z odpowiednim kodem języka do słownika (na przykładen-us
). - Przekaż obiekt dodatkowych parametrów zapytania do metody obiektu konfiguracji biblioteki
WithExtraQueryParameters
MSAL.
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();
Za pomocą zasad niestandardowych można przekazać niestandardowy parametr ciągu zapytania. Dobrym przykładem przypadku użycia jest dynamiczna zmiana zawartości strony.
Aby przekazać niestandardowy parametr ciągu zapytania, wykonaj następujące czynności:
- Skonfiguruj element ContentDefinitionParameters .
- Utwórz istniejący obiekt lub użyj go
Dictionary
do przechowywania dodatkowych parametrów zapytania. - Dodaj niestandardowy parametr ciągu zapytania, taki jak
campaignId
. Ustaw wartość parametru (na przykładgermany-promotion
). - Przekaż obiekt dodatkowych parametrów zapytania do metody obiektu konfiguracji biblioteki
WithExtraQueryParameters
MSAL.
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();
Aplikacja jednostki uzależnionej może wysyłać przychodzący token internetowy JSON (JWT) w ramach żądania autoryzacji OAuth2. Token przychodzący to wskazówka dotycząca użytkownika lub żądania autoryzacji. Azure AD B2C weryfikuje token, a następnie wyodrębnia oświadczenie.
Aby uwzględnić wskazówkę tokenu identyfikatora w żądaniu uwierzytelniania, wykonaj następujące czynności:
- W zasadach niestandardowych zdefiniuj profil techniczny wskazówki dotyczącej tokenu identyfikatora.
- W kodzie wygeneruj lub uzyskaj token identyfikatora, a następnie ustaw token na zmienną (na przykład
idToken
). - Utwórz istniejący obiekt lub użyj go
Dictionary
do przechowywania dodatkowych parametrów zapytania. -
id_token_hint
Dodaj parametr z odpowiednią zmienną, która przechowuje token identyfikatora. - Przekaż obiekt dodatkowych parametrów zapytania do atrybutu obiektu konfiguracji biblioteki
extraQueryParameters
MSAL.
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();
Biblioteka MSAL generuje komunikaty dziennika, które mogą pomóc zdiagnozować problemy. Aplikacja może skonfigurować rejestrowanie. Aplikacja może również zapewnić ci niestandardową kontrolę nad poziomem szczegółowości oraz informacją o tym, czy są rejestrowane dane osobiste i organizacyjne.
Zalecamy utworzenie wywołania zwrotnego rejestrowania biblioteki MSAL i zapewnienie użytkownikom możliwości przesyłania dzienników w przypadku problemów z uwierzytelnianiem. Biblioteka MSAL udostępnia następujące poziomy szczegółów rejestrowania:
- Błąd: Wystąpił problem i został wygenerowany błąd. Ten poziom służy do debugowania i identyfikowania problemów.
- Ostrzeżenie: Niekoniecznie wystąpił błąd lub błąd, ale informacje są przeznaczone do diagnostyki i ustalania problemów.
- Informacje: biblioteka MSAL rejestruje zdarzenia przeznaczone do celów informacyjnych i niekoniecznie do debugowania.
- Pełne: jest to poziom domyślny. Biblioteka MSAL rejestruje pełne szczegóły zachowania biblioteki.
Domyślnie rejestrator biblioteki MSAL nie przechwytuje żadnych danych osobowych ani organizacyjnych. Biblioteka umożliwia włączenie rejestrowania danych osobowych i organizacyjnych, jeśli zdecydujesz się to zrobić.
Poniższy fragment kodu przedstawia sposób konfigurowania rejestrowania biblioteki 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();
Podczas procesu rejestracji aplikacji klasycznej podczas wybierania identyfikatora URI przekierowania należy pamiętać o następujących ważnych kwestiach:
-
Programowanie: w przypadku programowania w aplikacjach klasycznych można ustawić identyfikator URI przekierowania na
http://localhost
, a Azure AD B2C będzie uwzględniać dowolny port w żądaniu. Jeśli zarejestrowany identyfikator URI zawiera port, Azure AD B2C użyje tylko tego portu. Jeśli na przykład zarejestrowany identyfikator URI przekierowania tohttp://localhost
, identyfikator URI przekierowania w żądaniu może mieć wartośćhttp://localhost:<randomport>
. Jeśli zarejestrowany identyfikator URI przekierowania tohttp://localhost:8080
, identyfikator URI przekierowania w żądaniu musi mieć wartośćhttp://localhost:8080
. -
Unikatowe: schemat identyfikatora URI przekierowania musi być unikatowy dla każdej aplikacji. W przykładzie
com.onmicrosoft.contosob2c.exampleapp://oauth/redirect
jest to schematcom.onmicrosoft.contosob2c.exampleapp
. Należy przestrzegać tego wzorca. Jeśli dwie aplikacje współużytkują ten sam schemat, użytkownicy otrzymają wybór aplikacji. Jeśli użytkownicy wybiorą się nieprawidłowo, logowanie zakończy się niepowodzeniem. -
Ukończono: identyfikator URI przekierowania musi mieć zarówno schemat, jak i ścieżkę. Ścieżka musi zawierać co najmniej jeden znak ukośnika po domenie. Na przykład
//oauth/
działa i//oauth
kończy się niepowodzeniem. Nie uwzględniaj znaków specjalnych w identyfikatorze URI. Na przykład znak podkreślenia (_) nie jest dozwolony.
- Aby dowiedzieć się więcej, zobacz MsAL for .NET, UWP, NetCore i Xamarin configuration options (Opcje konfiguracji biblioteki MSAL dla platformy .NET, UWP, NetCore i Xamarin).