Freigeben über


Aktivieren der Authentifizierung in Ihrer eigenen iOS Swift-App mithilfe von Azure AD B2C

Von Bedeutung

Ab dem 1. Mai 2025 steht Azure AD B2C nicht mehr für neue Kunden zur Verfügung. Weitere Informationen finden Sie in unseren HÄUFIG gestellten Fragen.

In diesem Artikel erfahren Sie, wie Sie Ihrer eigenen mobilen iOS Swift-Anwendung azure Active Directory B2C (Azure AD B2C)-Authentifizierung hinzufügen. Erfahren Sie, wie Sie eine iOS Swift-Anwendung in die Microsoft Authentication Library (MSAL) für iOS integrieren.

Verwenden Sie diesen Artikel mit "Konfigurieren der Authentifizierung" in einer iOS Swift-Beispielanwendung, wobei Sie die iOS Swift-Beispiel-App durch Ihre eigene iOS Swift-App ersetzen. Nachdem Sie die Anweisungen in diesem Artikel abgeschlossen haben, akzeptiert Ihre Anwendung Anmeldungen über Azure AD B2C.

Voraussetzungen

Überprüfen Sie die Voraussetzungen und Integrationsanweisungen in der Konfiguration der Authentifizierung in einer iOS Swift-Beispiel-App mithilfe von Azure AD B2C.

Erstellen eines iOS Swift-App-Projekts

Wenn Sie noch nicht über eine iOS Swift-Anwendung verfügen, richten Sie ein neues Projekt ein, indem Sie die folgenden Schritte ausführen:

  1. Öffnen Sie Xcode, und wählen Sie dann Datei>Neu>Projekt aus.
  2. Wählen Sie für iOS-Apps iOS-App> und dann"Weiter" aus.
  3. Stellen Sie für Optionen für Ihr neues Projekt auswählen Folgendes bereit:
    1. Produktname, wie MSALiOS z. B. .
    2. Organisationsbezeichner, wie contoso.com.
    3. Wählen Sie für die SchnittstelleStoryboard aus.
    4. Wählen Sie für den LebenszyklusuiKit App Delegate aus.
    5. Wählen Sie für die Sprache"Swift" aus.
  4. Wählen Sie Weiteraus.
  5. Wählen Sie einen Ordner aus, in dem Ihre App erstellt werden soll, und wählen Sie dann "Erstellen" aus.

Schritt 1: Installieren der MSAL-Bibliothek

  1. Verwenden Sie CocoaPods , um die MSAL-Bibliothek zu installieren. Erstellen Sie im selben Ordner wie die XCODEPROJ-Datei Ihres Projekts, wenn die Podfile-Datei nicht vorhanden ist, eine leere Datei, und nennen Sie sie podfile. Fügen Sie der Podfile-Datei den folgenden Code hinzu:

    use_frameworks!
    
    target '<your-target-here>' do
       pod 'MSAL'
    end
    
  2. Ersetzen Sie <your-target-here> durch den Namen Ihres Projekts (z. B. MSALiOS). Weitere Informationen finden Sie unter Podfile-Syntaxreferenz.

  3. Wechseln Sie in einem Terminalfenster zu dem Ordner, der die Podfile-Datei enthält, und führen Sie dann die Podinstallation aus, um die MSAL-Bibliothek zu installieren.

  4. Nachdem Sie den pod install Befehl ausgeführt haben, wird eine <Projektname.xcworkspace-Datei> erstellt. Um das Projekt in Xcode neu zu laden, schließen Sie Xcode, und öffnen Sie dann die <Projektname.xcworkspace-Datei>.

Schritt 2: Festlegen des App-URL-Schemas

Wenn sich benutzer authentifizieren, sendet Azure AD B2C einen Autorisierungs-Code mithilfe des Umleitungs-URI, der für die Azure AD B2C-Anwendungsregistrierung konfiguriert ist.

Das MSAL-Standardumleitungs-URI-Format ist msauth.[Your_Bundle_Id]://auth. Ein Beispiel wäre msauth.com.microsoft.identitysample.MSALiOS://auth, wobei msauth.com.microsoft.identitysample.MSALiOS es sich um das URL-Schema handelt.

Registrieren Sie in diesem Schritt Ihr URL-Schema mithilfe des CFBundleURLSchemes Arrays. Ihre Anwendung überwacht das URL-Schema für den Rückruf von Azure AD B2C.

Öffnen Sie in Xcode die Info.plist-Datei als Quellcodedatei. Fügen Sie im <dict> Abschnitt den folgenden XML-Codeausschnitt hinzu:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>msauth.com.microsoft.identitysample.MSALiOS</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>msauthv2</string>
    <string>msauthv3</string>
</array>

Schritt 3: Hinzufügen des Authentifizierungscodes

Der Beispielcode besteht aus einer UIViewController Klasse. Die Klasse:

  • Definiert die Struktur für eine Benutzeroberfläche.
  • Enthält Informationen zu Ihrem Azure AD B2C-Identitätsanbieter. Die App verwendet diese Informationen, um eine Vertrauensstellung mit Azure AD B2C herzustellen.
  • Enthält den Authentifizierungscode, um Benutzer zu authentifizieren, Token zu erwerben und zu überprüfen.

Wählen Sie eine UIViewController Stelle aus, an der sich Benutzer authentifizieren. Fügen Sie in Ihrem UIViewController die Codes mit dem Code zusammen, der auf GitHub bereitgestellt wurde.

Schritt 4: Konfigurieren Ihrer iOS Swift-App

Nachdem Sie den Authentifizierungscode hinzugefügt haben, konfigurieren Sie Ihre iOS Swift-App mit Ihren Azure AD B2C-Einstellungen. Azure AD B2C-Identitätsanbietereinstellungen werden in der UIViewController Klasse konfiguriert, die im vorherigen Abschnitt ausgewählt wurde.

Informationen zum Konfigurieren Ihrer iOS Swift-App finden Sie unter Konfigurieren der Authentifizierung in einer iOS Swift-Beispiel-App mit Azure AD B2C.

Schritt 5: Ausführen und Testen der mobilen App

  1. Erstellen und ausführen Sie das Projekt mit einem Simulator eines verbundenen iOS-Geräts.
  2. Wählen Sie Anmelden aus, und registrieren sich oder melden sich mit Ihrem lokalen Azure AD B2C- oder sozialen Konto an.
  3. Nachdem Sie sich erfolgreich authentifiziert haben, wird Ihr Anzeigename in der Navigationsleiste zu sehen sein.

Schritt 6: Anpassen der Codebausteine

In diesem Abschnitt werden die Codebausteine beschrieben, die die Authentifizierung für Ihre iOS Swift-App aktivieren. Darin werden die Methoden der UIViewController aufgelistet und erläutert, wie Sie Ihren Code anpassen.

Schritt 6.1: Instanziieren einer öffentlichen Clientanwendung

Öffentliche Clientanwendungen werden nicht als sicher eingestuft, um geheime Anwendungsschlüssel zu speichern, und sie verfügen nicht über geheime Clientschlüssel. Instanziieren Sie in viewDidLoad ein MSAL mithilfe eines öffentlichen Clientanwendungsobjekts.

Der folgende Swift-Codeausschnitt veranschaulicht das Initialisieren des MSAL mit einem MSALPublicClientApplicationConfig Konfigurationsobjekt.

Das Konfigurationsobjekt enthält Informationen zu Ihrer Azure AD B2C-Umgebung. Sie stellt z. B. die Client-ID, den Umleitungs-URI und die Autorität bereit, um Authentifizierungsanforderungen an Azure AD B2C zu erstellen. Informationen zum Konfigurationsobjekt finden Sie unter Konfigurieren der mobilen Beispiel-App.

do {

    let signinPolicyAuthority = try self.getAuthority(forPolicy: self.kSignupOrSigninPolicy)
    let editProfileAuthority = try self.getAuthority(forPolicy: self.kEditProfilePolicy)
    
    let pcaConfig = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: kRedirectUri, authority: signinPolicyAuthority)
    pcaConfig.knownAuthorities = [signinPolicyAuthority, editProfileAuthority]
    
    self.applicationContext = try MSALPublicClientApplication(configuration: pcaConfig)
    self.initWebViewParams()
    
    } catch {
        self.updateLoggingText(text: "Unable to create application \(error)")
    }

Die initWebViewParams Methode konfiguriert das interaktive Erlebnis der Authentifizierung.

Der folgende Swift-Codeausschnitt initialisiert das webViewParameters Klassenelement mit der Systemwebansicht. Weitere Informationen finden Sie unter Anpassen von Browsern und WebViews für iOS/macOS.

func initWebViewParams() {
    self.webViewParameters = MSALWebviewParameters(authPresentationViewController: self)
    self.webViewParameters?.webviewType = .default
}

Schritt 6.2: Starten einer interaktiven Autorisierungsanforderung

Eine interaktive Autorisierungsanforderung ist ein Vorgang, bei dem Benutzer aufgefordert werden, sich zu registrieren oder anzumelden, indem sie die System-Webansicht verwenden. Wenn Benutzer die Schaltfläche " Anmelden " auswählen, wird die authorizationButton Methode aufgerufen.

Die authorizationButton Methode bereitet das MSALInteractiveTokenParameters Objekt mit relevanten Daten zur Autorisierungsanforderung vor. Die acquireToken-Methode verwendet das MSALInteractiveTokenParameters, um Benutzer über die systemeigene Webansicht zu authentifizieren.

Der folgende Codeausschnitt veranschaulicht, wie die interaktive Autorisierungsanforderung gestartet wird:

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority

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

// On error code    
guard let result = result else {
    self.updateLoggingText(text: "Could not acquire token: \(error ?? "No error information" as! Error)")
    return
}

// On success code
self.accessToken = result.accessToken
self.updateLoggingText(text: "Access token is \(self.accessToken ?? "Empty")")
}

Nachdem Benutzer den Autorisierungsfluss erfolgreich oder nicht erfolgreich abgeschlossen haben, wird das Ergebnis an das Schließen der acquireToken Methode zurückgegeben.

Die acquireToken Methode gibt die result und error Objekte zurück. Verwenden Sie diesen Abschluss für Folgendes:

  • Aktualisieren Sie die Benutzeroberfläche der mobilen App mit Informationen, nachdem die Authentifizierung abgeschlossen wurde.
  • Rufen Sie einen Web-API-Dienst mit einem Zugriffstoken auf.
  • Behandeln von Authentifizierungsfehlern (z. B. wenn ein Benutzer den Anmeldefluss abbricht).

Schritt 6.3: Aufrufen einer Web-API

Um eine tokenbasierte Autorisierungsweb-API aufzurufen, benötigt die App ein gültiges Zugriffstoken. Die App führt die folgenden Aktionen aus:

  1. Erwirbt ein Zugriffstoken mit den erforderlichen Berechtigungen (Bereichen) für den Web-API-Endpunkt.
  2. Übergibt das Zugriffstoken als Bearertoken im Autorisierungsheader der HTTP-Anforderung mithilfe dieses Formats:
Authorization: Bearer <access-token>

Wenn sich Benutzende interaktiv authentifizieren, erhält die App im Abschluss acquireToken ein Zugriffstoken. Verwenden Sie für nachfolgende Web-API-Aufrufe die Methode zum stillen Abrufen von Token (acquireTokenSilent), wie in diesem Abschnitt beschrieben.

Die acquireTokenSilent Methode führt die folgenden Aktionen aus:

  1. Es versucht, ein Zugriffstoken mit den angeforderten Bereichen aus dem Tokencache abzurufen. Wenn das Token vorhanden ist und nicht abgelaufen ist, wird das Token zurückgegeben.
  2. Wenn das Token nicht im Tokencache vorhanden ist oder abgelaufen ist, versucht die MSAL-Bibliothek, das Aktualisierungstoken zum Abrufen eines neuen Zugriffstokens zu verwenden.
  3. Wenn das Aktualisierungstoken nicht vorhanden ist oder abgelaufen ist, wird eine Ausnahme zurückgegeben. In diesem Fall sollten Sie den Benutzer auffordern, sich interaktiv anzumelden.

Der folgende Codeausschnitt veranschaulicht das Abrufen eines Zugriffstokens:

do {

// Get the authority using the sign-in or sign-up user flow
let authority = try self.getAuthority(forPolicy: self.kSignupOrSigninPolicy)

// Get the current account from the application context
guard let thisAccount = try self.getAccountByPolicy(withAccounts: applicationContext.allAccounts(), policy: kSignupOrSigninPolicy) else {
    self.updateLoggingText(text: "There is no account available!")
    return
}

// Configure the acquire token silent parameters
let parameters = MSALSilentTokenParameters(scopes: kScopes, account:thisAccount)
parameters.authority = authority
parameters.loginHint = "username"

// Acquire token silent
self.applicationContext.acquireTokenSilent(with: parameters) { (result, error) in
    if let error = error {
        
        let nsError = error as NSError
        
        // interactionRequired means we need to ask the user to sign in. This usually happens
        // when the user's Refresh Token is expired or if the user has changed their password
        // among other possible reasons.
        
        if (nsError.domain == MSALErrorDomain) {
            
            if (nsError.code == MSALError.interactionRequired.rawValue) {
                
                // Start an interactive authorization code
                // Notice we supply the account here. This ensures we acquire token for the same account
                // as we originally authenticated.
                
                ...
            }
        }
        
        self.updateLoggingText(text: "Could not acquire token: \(error)")
        return
    }
    
    guard let result = result else {
        
        self.updateLoggingText(text: "Could not acquire token: No result returned")
        return
    }
    
    // On success, set the access token to the accessToken class member. 
    // The callGraphAPI method uses the access token to call a web API  
    self.accessToken = result.accessToken
    ...
}
} catch {
self.updateLoggingText(text: "Unable to construct parameters before calling acquire token \(error)")
}

Die callGraphAPI Methode ruft das Zugriffstoken ab und ruft die Web-API auf, wie hier gezeigt:

@objc func callGraphAPI(_ sender: UIButton) {
    guard let accessToken = self.accessToken else {
        self.updateLoggingText(text: "Operation failed because could not find an access token!")
        return
    }
    
    let sessionConfig = URLSessionConfiguration.default
    sessionConfig.timeoutIntervalForRequest = 30
    let url = URL(string: self.kGraphURI)
    var request = URLRequest(url: url!)
    request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
    let urlSession = URLSession(configuration: sessionConfig, delegate: self, delegateQueue: OperationQueue.main)
    
    self.updateLoggingText(text: "Calling the API....")
    
    urlSession.dataTask(with: request) { data, response, error in
        guard let validData = data else {
            self.updateLoggingText(text: "Could not call API: \(error ?? "No error information" as! Error)")
            return
        }
        
        let result = try? JSONSerialization.jsonObject(with: validData, options: [])
        
        guard let validResult = result as? [String: Any] else {
            self.updateLoggingText(text: "Nothing returned from API")
            return
        }
        
        self.updateLoggingText(text: "API response: \(validResult.debugDescription)")
        }.resume()
}

Schritt 6.4: Abmelden von Benutzern

Wenn Sie sich mit MSAL abmelden, werden alle bekannten Informationen zu Benutzern aus der Anwendung entfernt. Verwenden Sie die Abmeldemethode, um Benutzer abzumelden und die Benutzeroberfläche zu aktualisieren. Sie können beispielsweise geschützte UI-Elemente ausblenden, die Abmeldeschaltfläche ausblenden oder die Anmeldeschaltfläche anzeigen.

Der folgende Codeausschnitt veranschaulicht, wie Benutzer abgemeldet werden:

@objc func signoutButton(_ sender: UIButton) {
do {
    
    
    let thisAccount = try self.getAccountByPolicy(withAccounts: applicationContext.allAccounts(), policy: kSignupOrSigninPolicy)
    
    if let accountToRemove = thisAccount {
        try applicationContext.remove(accountToRemove)
    } else {
        self.updateLoggingText(text: "There is no account to signing out!")
    }
    
    ...
    
} catch  {
    self.updateLoggingText(text: "Received error signing out: \(error)")
}
}

Nächste Schritte

Erfahren Sie, wie Sie Folgendes tun können: