Udostępnij za pośrednictwem


Włączanie opcji uwierzytelniania w aplikacji Swift dla systemu iOS przy użyciu usługi Azure AD B2C

Ważne

Od 1 maja 2025 r. usługa Azure AD B2C nie będzie już dostępna do zakupu dla nowych klientów. Dowiedz się więcej w naszych często zadawanych pytaniach.

W tym artykule opisano sposoby włączania, dostosowywania i ulepszania środowiska uwierzytelniania usługi Azure Active Directory B2C (Azure AD B2C) dla aplikacji Swift systemu iOS.

Przed rozpoczęciem zapoznaj się z następującymi artykułami:

Korzystanie z domeny niestandardowej

Za pomocą domeny niestandardowej można w pełni oznaczyć adres URL uwierzytelniania. Z perspektywy użytkownika użytkownicy pozostają w twojej domenie podczas procesu uwierzytelniania, a nie są przekierowywani do nazwy domeny b2clogin.com usługi Azure AD B2C.

Aby usunąć wszystkie odwołania do b2c w adresie URL, możesz również zastąpić nazwę dzierżawy B2C, np. contoso.onmicrosoft.com, w adresie URL żądania uwierzytelniania identyfikatorem GUID dzierżawy. Możesz na przykład zmienić wartość https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ na https://account.contosobank.co.uk/<tenant ID GUID>/.

Aby użyć domeny niestandardowej i identyfikatora dzierżawy w adresie URL uwierzytelniania, wykonaj następujące czynności:

  1. Postępuj zgodnie ze wskazówkami w temacie Włączanie domen niestandardowych.
  2. Zaktualizuj element członkowski klasy kAuthorityHostName swoją własną domeną.
  3. Zaktualizuj element członkowski kTenantName klasy przy użyciu identyfikatora najemcy.

Poniższy kod Swift pokazuje ustawienia aplikacji przed zmianą:

let kTenantName = "contoso.onmicrosoft.com" 
let kAuthorityHostName = "contoso.b2clogin.com" 

Poniższy kod Swift pokazuje ustawienia aplikacji po zmianie:

let kTenantName = "00000000-0000-0000-0000-000000000000" 
let kAuthorityHostName = "login.contoso.com" 

Wstępne wypełnianie nazwy logowania

Podczas procesu logowania użytkownika, 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. Usługa Azure AD B2C automatycznie wypełnia nazwę logowania, a użytkownik musi podać tylko hasło.

Aby wstępnie uzupełnić nazwę użytkownika, wykonaj następujące czynności:

  1. Jeśli używasz zasad niestandardowych, dodaj wymagane oświadczenie wejściowe zgodnie z opisem w temacie Konfigurowanie logowania bezpośredniego.
  2. Poszukaj obiektu konfiguracji biblioteki Microsoft Authentication Library (MSAL), a następnie dodaj metodę withLoginHint() za pomocą wskazówki logowania.
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.loginHint = "bob@contoso.com"
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Przeselekcjonować dostawcę tożsamości

Jeśli skonfigurowałeś proces logowania dla swojej aplikacji, aby obejmował integrację kont społecznościowych, takich jak Facebook, LinkedIn lub Google, możesz określić parametr domain_hint. Ten parametr zapytania zawiera wskazówkę dotyczącą dostawcy tożsamości społecznościowych usługi Azure AD B2C, który powinien być używany do logowania. Jeśli na przykład aplikacja określa domain_hint=facebook.com, 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:

  1. Sprawdź nazwę domeny zewnętrznego dostawcy tożsamości. Aby uzyskać więcej informacji, zobacz Przekierowanie logowania do dostawcy społecznościowego.
  2. Utwórz lub użyj istniejącego obiektu listy do przechowywania dodatkowych parametrów zapytania.
  3. domain_hint Dodaj parametr z odpowiednią nazwą domeny do listy (na przykład facebook.com).
  4. Przekaż listę dodatkowych parametrów zapytania do atrybutu extraQueryParameters w obiekcie konfiguracji MSAL.
let extraQueryParameters: [String: String] = ["domain_hint": "facebook.com"]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Określanie języka interfejsu użytkownika

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:

  1. Konfigurowanie dostosowywania języka.
  2. Utwórz lub użyj istniejącego obiektu listy do przechowywania dodatkowych parametrów zapytania.
  3. ui_locales Dodaj parametr z odpowiednim kodem języka do listy (na przykład en-us).
  4. Przekaż listę dodatkowych parametrów zapytania do atrybutu extraQueryParameters w obiekcie konfiguracji MSAL.
let extraQueryParameters: [String: String] = ["ui_locales": "en-us"]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Przekazywanie niestandardowego parametru ciągu zapytania

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:

  1. Skonfiguruj element ContentDefinitionParameters .
  2. Utwórz lub użyj istniejącego obiektu listy do przechowywania dodatkowych parametrów zapytania.
  3. Dodaj niestandardowy parametr ciągu zapytania, taki jak campaignId. Ustaw wartość parametru (na przykład germany-promotion).
  4. Przekaż listę dodatkowych parametrów zapytania do atrybutu extraQueryParameters w obiekcie konfiguracji MSAL.
let extraQueryParameters: [String: String] = ["campaignId": "germany-promotion"]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Przekaż wskazówkę dotyczącą tokenu identyfikatora

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. Usługa 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:

  1. W zasadach niestandardowych zdefiniuj profil techniczny wskazówki dotyczącej tokenu identyfikatora.
  2. W kodzie wygeneruj lub uzyskaj token identyfikatora, a następnie ustaw token na zmienną (na przykład idToken).
  3. Utwórz lub użyj istniejącego obiektu listy do przechowywania dodatkowych parametrów zapytania.
  4. id_token_hint Dodaj parametr z odpowiednią zmienną, która przechowuje token identyfikatora.
  5. Przekaż listę dodatkowych parametrów zapytania do atrybutu extraQueryParameters w obiekcie konfiguracji MSAL.
let extraQueryParameters: [String: String] = ["id_token_hint": idToken]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Konfigurowanie rejestrowania

Biblioteka MSAL generuje komunikaty dziennika, które mogą pomóc w diagnozowaniu problemów. Aplikacja może skonfigurować rejestrowanie. Aplikacja może również zapewnić dostosowaną kontrolę nad poziomem szczegółowości i tego, czy dane osobiste i organizacyjne są rejestrowane.

Zalecamy utworzenie wywołania zwrotnego rejestrowania MSAL i zapewnienie użytkownikom sposobu przesyłania dzienników w przypadku problemów z uwierzytelnianiem. Biblioteka MSAL udostępnia te 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: MSAL rejestruje zdarzenia przeznaczone do celów informacyjnych, a niekoniecznie do debugowania.
  • Pełne: jest to poziom domyślny. Biblioteka MSAL rejestruje pełne szczegóły swojego działania.

Domyślnie rejestrator MSAL nie przechwytuje żadnych danych osobowych ani danych organizacyjnych. Biblioteka udostępnia opcję włączenia rejestrowania danych osobowych i organizacyjnych, jeśli zdecydujesz się to zrobić.

Rejestrator MSAL należy ustawić tak szybko, jak to możliwe w sekwencji uruchamiania aplikacji, zanim zostaną wykonane żądania MSAL. Skonfiguruj logowanie MSAL w metodzie AppDelegate.swift.

Poniższy fragment kodu przedstawia sposób konfigurowania rejestrowania biblioteki MSAL:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        MSALGlobalConfig.loggerConfig.logLevel = .verbose
        MSALGlobalConfig.loggerConfig.setLogCallback { (logLevel, message, containsPII) in
            
            // If PiiLoggingEnabled is set YES, this block will potentially contain sensitive information (Personally Identifiable Information), but not all messages will contain it.
            // containsPII == YES indicates if a particular message contains PII.
            // You might want to capture PII only in debug builds, or only if you take necessary actions to handle PII properly according to legal requirements of the region
            if let displayableMessage = message {
                if (!containsPII) {
                    #if DEBUG
                    // NB! This sample uses print just for testing purposes
                    // You should only ever log to NSLog in debug mode to prevent leaking potentially sensitive information
                    print(displayableMessage)
                    #endif
                }
            }
        }
        return true
    }

Doświadczenie osadzonego widoku internetowego

Przeglądarki internetowe są wymagane do uwierzytelniania interakcyjnego. Domyślnie biblioteka MSAL używa systemowego widoku internetowego. Podczas logowania biblioteka MSAL wyświetla widok internetowy systemu iOS z interfejsem użytkownika usługi Azure AD B2C.

Aby uzyskać więcej informacji, zobacz artykuł Dostosowywanie przeglądarek i elementów WebView dla systemu iOS/macOS .

W zależności od wymagań można użyć osadzonego widoku internetowego. Istnieją różnice w zachowaniu wizualnym i logowaniu jednokrotnym między osadzonym widokiem sieciowym a systemowym widokiem sieciowym w MSAL.

Zrzut ekranu przedstawiający różnicę między środowiskiem systemowego widoku internetowego a osadzonym środowiskiem widoku internetowego.

Ważne

Zalecamy użycie domyślnej platformy, która jest zwykle przeglądarką systemową. Przeglądarka systemowa lepiej zapamiętuje użytkowników, którzy się wcześniej zalogowali. Niektórzy dostawcy tożsamości, tacy jak Google, nie obsługują osadzonego środowiska wyświetlania.

Aby zmienić to zachowanie, zmień webviewType atrybut na MSALWebviewParameterswkWebView. W poniższym przykładzie pokazano, jak zmienić typ widoku internetowego na widok osadzony:

func initWebViewParams() {
    self.webViewParameters = MSALWebviewParameters(authPresentationViewController: self)
    
    // Use embedded view experience
    self.webViewParameters?.webviewType = .wkWebView
}

Dalsze kroki