Teilen über


Tutorial: Aufrufen einer geschützten Web-API in einer iOS-App (Swift)

Gilt für: Grüner Kreis mit einem weißen Häkchensymbol, das angibt, dass der folgende Inhalt für Mitarbeitermandanten gilt. Mitarbeitermandanten grüner Kreis mit einem weißen Häkchensymbol, das angibt, dass der folgende Inhalt für externe Mandanten gilt. Externe Mandanten (weitere Informationen)

Dies ist das vierte Tutorial in der Tutorialreihe, die Sie beim Anmelden von Benutzern und beim Aufrufen einer geschützten Web-API mit Microsoft Entra ID unterstützt.

In diesem Tutorial erfahren Sie:

  • Rufen Sie eine geschützte Web-API auf.

Voraussetzungen

API aufrufen

Sobald Sie ein Token erhalten haben, kann Ihre App es im HTTP-Header verwenden, um eine autorisierte Anforderung an Microsoft Graph zu stellen:

Headerschlüssel Wert
Autorisierung Bearer <acess-token>

Fügen Sie der ViewController-Klasse folgenden Code hinzu:

    func getContentWithToken() {

        // Specify the Graph API endpoint
        let graphURI = getGraphEndpoint()
        let url = URL(string: graphURI)
        var request = URLRequest(url: url!)

        // Set the Authorization header for the request. We use Bearer tokens, so we specify Bearer + the token we got from the result
        request.setValue("Bearer \(self.accessToken)", forHTTPHeaderField: "Authorization")

        URLSession.shared.dataTask(with: request) { data, response, error in

            if let error = error {
                self.updateLogging(text: "Couldn't get graph result: \(error)")
                return
            }

            guard let result = try? JSONSerialization.jsonObject(with: data!, options: []) else {

                self.updateLogging(text: "Couldn't deserialize result JSON")
                return
            }

            self.updateLogging(text: "Result from Graph: \(result))")

            }.resume()
    }

Weitere Informationen zur Microsoft Graph-API finden Sie hier.

Teste deine App

Erstellen Sie die App, und stellen Sie sie auf einem Testgerät oder in einem Simulator bereit. Sie sollten sich anmelden und Token für Microsoft Entra ID oder persönliche Microsoft-Konten abrufen können.

Wenn sich ein Benutzer zum ersten Mal bei Ihrer App anmeldet, wird er von Microsoft aufgefordert, den angeforderten Berechtigungen zuzustimmen. Die meisten Benutzer können zustimmen, allerdings haben einige Microsoft Entra-Mandanten die Zustimmung durch Benutzer deaktiviert, sodass Administratoren im Namen aller Benutzer zustimmen müssen. Zur Unterstützung dieses Szenarios müssen Sie die Bereiche Ihrer App registrieren.

Nach der Anmeldung zeigt die App die vom Microsoft Graph-Endpunkt /me zurückgegebenen Daten an.

Nächste Schritte

In der mehrteiligen Szenarioreihe erfahren Sie mehr über das Entwickeln von mobilen Apps, die geschützte Web-APIs abrufen.

Dies ist das vierte Tutorial in der Tutorialreihe, die Sie beim Anmelden von Benutzern und beim Aufrufen einer geschützten Web-API mit der externen Microsoft Entra ID unterstützt.

In diesem Tutorial erfahren Sie:

  • Rufen Sie eine geschützte Web-API auf.

Voraussetzungen

  • Lernprogramm: Anmelden von Benutzern in der mobilen iOS-App (Swift)

  • Eine API-Registrierung, die mindestens einen Bereich (delegierte Berechtigungen) und eine App-Rolle (Anwendungsberechtigung) wie ToDoList.Read verfügbar macht. Wenn Sie dies noch nicht getan haben, befolgen Sie die Anweisungen zum Aufrufen einer API in einer mobilen iOS-Beispiel-App , um über eine funktionsfähig geschützte ASP.NET Core-Web-API zu verfügen. Stellen Sie sicher, dass Sie die folgenden Schritte ausführen:

    • Registrieren Sie eine Web-API-Anwendung.
    • Konfigurieren Sie API-Bereiche.
    • Konfigurieren von App-Rollen.
    • Konfigurieren optionaler Ansprüche.
    • Klonen oder Herunterladen einer Beispiel-Web-API.
    • Konfigurieren und Ausführen einer Beispiel-Web-API.

API aufrufen

Verwenden Sie den folgenden Code, um eine geschützte Web-API aus Ihrer iOS-App aufzurufen:

    func getContentWithToken() {
        // Specify the API endpoint in _Configuration.swift_ file you created earlier
        guard let url = URL(string: Configuration.kProtectedAPIEndpoint) else {
            let errorMessage = "Invalid API url"
            print(errorMessage)
            updateLogging(text: errorMessage)
            return
        }
        var request = URLRequest(url: url)

        // Set the Authorization header for the request. We use Bearer tokens, so we specify Bearer + the token we got from the result
        request.setValue("Bearer \(self.accessToken)", forHTTPHeaderField: "Authorization")

        self.updateLogging(text: "Performing request...")

        URLSession.shared.dataTask(with: request) { data, response, error in

            if let error = error {
                self.updateLogging(text: "Couldn't get API result: \(error)")
                return
            }

            guard let httpResponse = response as? HTTPURLResponse,
                  (200...299).contains(httpResponse.statusCode)
            else {
                self.updateLogging(text: "Couldn't get API result: \(error)")
                return
            }

            guard let data = data, let result = try? JSONSerialization.jsonObject(with: data, options: []) else {
                self.updateLogging(text: "Couldn't deserialize result JSON")
                return
            }

            self.updateLogging(text: """
                                Accessed API successfully using access token.
                                HTTP response code: \(httpResponse.statusCode)
                                HTTP response body: \(result)
                                """)

            }.resume()
    }

Der Code gibt den API-Endpunkt an und stellt seine Gültigkeit sicher. Anschließend wird ein Anforderungsobjekt erstellt, wobei der Autorisierungsheader mit dem abgerufenen Zugriffstoken festgelegt wird. Nachdem die Initiierung der Anforderung protokolliert wurde, wird die Anforderung asynchron mit URLSessionausgeführt.

Nach Abschluss wird während der Anforderung nach Fehlern gesucht. Wenn ein Fehler auftritt, wird die entsprechende Meldung protokolliert. Als Nächstes wird der Erfolg der HTTP-Antwort überprüft und sichergestellt, dass sie im Bereich von 200 bis 299 Statuscodes liegt. Danach werden die empfangenen JSON-Daten deserialisiert. Schließlich wird der Protokollierungstext aktualisiert, der den erfolgreichen Zugriff auf die API zusammen mit den relevanten HTTP-Antwortdetails anzeigt.