Aktivieren der Authentifizierungsoptionen in einer iOS Swift-App mithilfe von Azure AD B2C

In diesem Artikel werden verschiedene Möglichkeiten beschrieben, wie Sie die Azure Active Directory B2C-Authentifizierungsoberfläche (Azure AD B2C) für Ihre iOS Swift-Anwendung aktivieren, anpassen und verbessern können.

Lesen Sie die folgenden Artikel, bevor Sie beginnen:

Verwenden einer benutzerdefinierten Domäne

Durch Verwenden einer benutzerdefinierten Domäne können Sie die Authentifizierungs-URL vollständig mit Branding versehen. Aus seiner Sicht bleibt der Benutzer während des Authentifizierungsprozesses in Ihrer Domäne und wird nicht zum Azure AD B2C-Domänennamen b2clogin.com umgeleitet.

Um alle Verweise auf „b2c“ in der URL zu entfernen, können Sie auch den Namen Ihres B2C-Mandanten, contoso.onmicrosoft.com, in der URL der Authentifizierungsanforderung durch die GUID Ihrer Mandanten-ID ersetzen. Sie können z. B. https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ in https://account.contosobank.co.uk/<tenant ID GUID>/ ändern.

Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte Domäne und Ihre Mandanten-ID in der Authentifizierungs-URL zu verwenden:

  1. Befolgen Sie die Anleitung unter Aktivieren von benutzerdefinierten Domänen für Azure Active Directory B2C.
  2. Aktualisieren Sie den Klassenmember kAuthorityHostName mit Ihrer benutzerdefinierten Domäne.
  3. Aktualisieren Sie den Klassenmember kTenantName mit Ihrer Mandanten-ID.

Der folgende Swift-Code zeigt die App-Einstellungen vor der Änderung:

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

Der folgende Swift-Code zeigt die App-Einstellungen nach der Änderung:

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

Auffüllen des Anmeldenamens

Während einer User Journey zur Anmeldung zielt Ihre App ggf. auf einen bestimmten Benutzer ab. Wenn eine App auf einen Benutzer abzielt, kann sie in der Autorisierungsanforderung den Abfrageparameter login_hint mit dem Anmeldenamen des Benutzers angeben. Azure AD B2C füllt den Anmeldenamen automatisch auf. Der Benutzer muss nur das Kennwort angeben.

Gehen Sie wie folgt vor, um den Anmeldenamen vorab aufzufüllen:

  1. Wenn Sie eine benutzerdefinierte Richtlinie verwenden, fügen Sie den erforderlichen Eingabeanspruch hinzu, wie unter dem Verfahren Einrichten der direkten Anmeldung beschrieben.
  2. Wechseln Sie zu Ihrem MSAL-Konfigurationsobjekt (Microsoft Authentication Library), und fügen Sie die withLoginHint()-Methode mit dem Anmeldehinweis hinzu.
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
...

Vorabauswahl eines Identitätsanbieters

Wenn Sie die User Journey für die Anmeldung bei Ihrer Anwendung so konfiguriert haben, dass Konten für soziale Netzwerke inbegriffen sind, wie z.B. Facebook, LinkedIn oder Google, können Sie den Parameter domain_hint angeben. Dieser Abfrageparameter enthält einen Hinweis für Azure AD B2C zu dem sozialen Netzwerk als Identitätsanbieter, das für die Anmeldung verwendet werden sollte. Wenn in der Anwendung beispielsweise domain_hint=facebook.com angegeben ist, erfolgt der Anmeldefluss direkt auf der Anmeldeseite von Facebook.

Gehen Sie wie folgt vor, um Benutzer zu einem externen Identitätsanbieter umzuleiten:

  1. Überprüfen Sie den Domänennamen Ihres externen Identitätsanbieters. Weitere Informationen finden Sie unter Umleiten einer Anmeldung zu einem Anbieter sozialer Netzwerke.
  2. Verwenden Sie ein vorhandenes Listenobjekt, um zusätzliche Abfrageparameter zu speichern, oder erstellen Sie ein neues Listenobjekt.
  3. Fügen Sie der Liste den domain_hint-Parameter mit dem entsprechenden Domänennamen hinzu (z. B. facebook.com).
  4. Übergeben Sie die zusätzliche Abfrageparameterliste an das extraQueryParameters-Attribut des MSAL-Konfigurationsobjekts.
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
...

Ändern Sie die Sprache für die Benutzeroberfläche

Die Sprachanpassung in Azure AD B2C ermöglicht Ihrem Benutzerfluss, eine Vielzahl von Sprachen zu berücksichtigen, um die Anforderungen Ihrer Kunden zu erfüllen. Weitere Informationen hierzu finden Sie unter Sprachanpassung.

Gehen Sie wie folgt vor, um die bevorzugte Sprache festzulegen:

  1. Konfigurieren Sie die Sprachanpassung.
  2. Verwenden Sie ein vorhandenes Listenobjekt, um zusätzliche Abfrageparameter zu speichern, oder erstellen Sie ein neues Listenobjekt.
  3. Fügen Sie der Liste den ui_locales-Parameter mit dem entsprechenden Sprachcode hinzu (z. B. en-us).
  4. Übergeben Sie die zusätzliche Abfrageparameterliste an das extraQueryParameters-Attribut des MSAL-Konfigurationsobjekts.
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
...

Das Übergeben eines benutzerdefinierten Abfragezeichenfolgenparameters

Mit benutzerdefinierten Richtlinien können Sie einen benutzerdefinierten Abfragezeichenfolgenparameter übergeben. Ein gutes Anwendungsfallbeispiel ist die dynamische Änderung der Seitenanzahl.

Um einen benutzerdefinierten Abfragezeichenfolgenparameter zu übergeben, gehen Sie folgendermaßen vor:

  1. Konfigurieren Sie das ContentDefinitionParameters-Element.
  2. Verwenden Sie ein vorhandenes Listenobjekt, um zusätzliche Abfrageparameter zu speichern, oder erstellen Sie ein neues Listenobjekt.
  3. Fügen Sie den benutzerdefinierten Abfragezeichenfolgenparameter hinzu (z. B. campaignId). Legen Sie den Parameterwert fest (z. B. germany-promotion).
  4. Übergeben Sie die zusätzliche Abfrageparameterliste an das extraQueryParameters-Attribut des MSAL-Konfigurationsobjekts.
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
...

Übergeben eines ID-Tokenhinweises

Eine Anwendung der vertrauenden Seite kann ein eingehendes JWT (JSON Web Token) als Teil der OAuth2-Autorisierungsanforderung senden. Das eingehende Token ist ein Hinweis zum Benutzer oder zur Autorisierungsanforderung. Azure AD B2C überprüft das Token und extrahiert die Ansprüche.

Führen Sie die folgenden Schritte aus, um einen ID-Tokenhinweis in die Authentifizierungsanforderung einzufügen:

  1. Definieren Sie ein technisches ID-Token-Hinweisprofil in Ihrer benutzerdefinierten Richtlinie.
  2. Generieren Sie in Ihrem Code ein ID-Token, oder rufen Sie ein ID-Token ab. Legen Sie dieses dann auf eine Variable fest (z. B. idToken).
  3. Verwenden Sie ein vorhandenes Listenobjekt, um zusätzliche Abfrageparameter zu speichern, oder erstellen Sie ein neues Listenobjekt.
  4. Fügen Sie den id_token_hint-Parameter mit der entsprechenden Variablen hinzu, in der das ID-Token gespeichert wird.
  5. Übergeben Sie die zusätzliche Abfrageparameterliste an das extraQueryParameters-Attribut des MSAL-Konfigurationsobjekts.
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
...

Konfigurieren der Protokollierung

Die MSAL-Bibliothek generiert Protokollmeldungen, die bei der Diagnose von Problemen helfen können. Die App kann die Protokollierung konfigurieren. Die App kann Ihnen auch eine benutzerdefinierte Kontrolle über den Detaillierungsgrad geben und darüber, ob persönliche und Organisationsdaten protokolliert werden.

Sie sollten einen MSAL-Protokollierungsrückruf erstellen und Benutzern eine Möglichkeit bieten, Protokolle zu übermitteln, wenn Authentifizierungsprobleme auftreten. MSAL bietet mehrere Protokollierungsdetailgrade:

  • Fehler: Gibt an, dass ein Problem aufgetreten ist und ein Fehler generiert wurde. Dieser Grad wird zum Debuggen und Identifizieren von Problemen verwendet.
  • Warnung: Es muss nicht unbedingt zu einem Fehler oder Ausfall gekommen sein. Diese Informationen sind zum Diagnostizieren und Ermitteln von Problemen vorgesehen.
  • Info: MSAL protokolliert Ereignisse, die zu Informationszwecken und nicht notwendigerweise zum Debuggen bestimmt sind.
  • Ausführlich: Dies ist die Standardstufe. Msal protokolliert die vollständigen Details des Bibliotheksverhaltens.

Die MSAL-Protokollierung erfasst standardmäßig keine personenbezogenen oder Organisationsdaten. Die Bibliothek bietet Ihnen jedoch die Option, die Protokollierung von personenbezogenen Daten und Organisationsdaten zu aktivieren.

Die MSAL-Protokollierung sollte so früh wie möglich in der App-Startsequenz festgelegt werden, bevor MSAL-Anforderungen gesendet werden. Konfigurieren Sie die MSAL-Protokollierung in der application-Methode AppDelegate.swift.

Der folgende Codeausschnitt veranschaulicht das Konfigurieren der MSAL-Protokollierung:

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
    }

Benutzeroberfläche für eingebettete Webansicht

Webbrowser sind eine Voraussetzung für die interaktive Authentifizierung. Die MSAL-Bibliothek verwendet standardmäßig die Systemwebansicht. Während der Anmeldung öffnet die MSAL-Bibliothek die iOS-Systemwebansicht mit der Azure AD B2C-Benutzeroberfläche.

Weitere Informationen finden Sie im Artikel Anpassen von Browsern und Webansichten für iOS/macOS.

Je nach Ihren Anforderungen können Sie die eingebettete Webansicht verwenden. Zwischen der eingebetteten Webansicht und der Systemwebansicht in MSAL gibt es visuelle Unterschiede und Unterschiede bei SSO-Vorgängen.

Screenshot: Unterschied zwischen der Benutzeroberfläche der Systemwebansicht und der eingebetteten Webansicht

Wichtig

Es wird empfohlen, die Plattformstandardeinstellung zu verwenden, die normalerweise der Systembrowser ist. Der Systembrowser kann die Benutzer besser speichern, die sich zuvor angemeldet haben. Einige Identitätsanbieter*innen (z. B. Google) unterstützen keine eingebettete Ansicht.

Um dieses Verhalten zu ändern, ändern Sie das webviewType-Attribut von MSALWebviewParameters in wkWebView. Im folgenden Beispiel wird veranschaulicht, wie der Webansichtstyp in eine eingebettete Ansicht geändert wird:

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

Nächste Schritte