Share via


Zelfstudie: Een beveiligde web-API aanroepen in de iOS-app (Swift)

Dit is de vierde zelfstudie in de reeks zelfstudies die u begeleidt bij het aanmelden van gebruikers en het aanroepen van een beveiligde web-API met behulp van Microsoft Entra Externe ID.

In deze zelfstudie gaat u:

  • Een beveiligde web-API aanroepen.

Vereisten

  • Zelfstudie: Gebruikers aanmelden in de mobiele iOS-app (Swift)

  • Een API-registratie die ten minste één bereik (gedelegeerde machtigingen) en één app-rol (toepassingsmachtiging) beschikbaar maakt, zoals ToDoList.Read. Als u dat nog niet hebt gedaan, volgt u de instructies voor het aanroepen van een API in een voorbeeld van een mobiele iOS-app om een functionele beveiligde ASP.NET Core-web-API te hebben. Zorg ervoor dat u de volgende stappen uitvoert:

    • Registreer een web-API-toepassing.
    • API-bereiken configureren.
    • App-rollen configureren.
    • Configureer optionele claims.
    • Kloon of download voorbeeldweb-API.
    • Configureer en voer voorbeeldweb-API uit.

API aanroepen

Gebruik de volgende code om een beveiligde web-API aan te roepen vanuit uw iOS-app:

    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()
    }

De code geeft het API-eindpunt op, waardoor de geldigheid ervan wordt gewaarborgd. Vervolgens wordt een aanvraagobject samengesteld, waarbij de autorisatieheader wordt ingesteld met het verkregen toegangstoken. Nadat de initiatie van de aanvraag is aangemeld, wordt de aanvraag asynchroon uitgevoerd met behulp van URLSession.

Na voltooiing wordt gecontroleerd op eventuele fouten tijdens de aanvraag. Als er een fout optreedt, wordt het bijbehorende bericht in een logboek opgeslagen. Vervolgens wordt gecontroleerd of het HTTP-antwoord is geslaagd, zodat het binnen het bereik van 200 tot 299 statuscodes valt. Daarna worden de ontvangen JSON-gegevens gedeserialiseerd. Ten slotte wordt de logboektekst bijgewerkt, waarmee wordt aangegeven dat de API is geopend, samen met relevante HTTP-antwoorddetails.