Dela via


Självstudie: Anropa ett skyddat webb-API i iOS-appen (Swift)

Gäller för: Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för personalklienter.Personalklienter Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för externa klienter. Externa klienter (läs mer)

Det här är den fjärde självstudien i självstudieserien som hjälper dig att logga in användare och anropa ett skyddat webb-API med hjälp av Microsoft Entra-ID.

I den här handledningen:

  • Anropa ett skyddat webb-API.

Förutsättningar

Anrops-API

När du har en token kan appen använda den i HTTP-huvudet för att göra en auktoriserad begäran till Microsoft Graph:

huvudnyckel värde
Tillstånd Bearer <åtkomsttoken>

Lägg till följande kod i klassen ViewController:

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

Mer information om Microsoft Graph API finns i Microsoft Graph API.

Testa din app

Skapa och distribuera appen till en testenhet eller simulator. Du bör kunna logga in och hämta token för Microsoft Entra-ID eller personliga Microsoft-konton.

Första gången en användare loggar in på din app uppmanas de av Microsoft-identiteten att samtycka till de begärda behörigheterna. Även om de flesta användare kan samtycka har vissa Microsoft Entra-klienter inaktiverat användarmedgivande, vilket kräver att administratörer samtycker för alla användares räkning. För att stödja det här scenariot registrerar du appens omfång.

När du har loggat in visar appen de data som returneras från Microsoft Graph-/me slutpunkten.

Nästa steg

Läs mer om att skapa mobilappar som anropar skyddade webb-API:er i vår scenarioserie i flera delar.

Det här är den fjärde guiden i en självstudieserie som vägledar dig att logga in användare och anropa ett skyddat webb-API med Microsoft Entra External ID.

I den här handledningen:

  • Anropa ett skyddat webb-API.

Förutsättningar

  • Självstudie: Logga in användare i iOS-mobilappar (Swift)

  • En API-registrering som exponerar minst ett omfång (delegerade behörigheter) och en roll för app (applikationsbehörighet) som ToDoList.Read. Om du inte redan har gjort det, följ anvisningarna för att anropa ett API i en iOS-exempelmobilapp för att få ett fungerande och skyddat ASP.NET Core-webb-API. Se till att du slutför följande steg:

    • Registrera ett webb-API-program.
    • Konfigurera API-omfång.
    • Konfigurera applikationsroller.
    • Konfigurera valfria anspråk.
    • Klona eller ladda ned exempelwebb-API.
    • Konfigurera och köra exempelwebb-API: et.

Anrops-API

Om du vill anropa ett skyddat webb-API från din iOS-app använder du följande kod:

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

Koden anger API-slutpunkten, vilket säkerställer dess giltighet. Sedan konstruerar den ett begärandeobjekt och anger auktoriseringshuvudet med den åtkomsttoken som hämtas. Efter att initieringen av begäran har loggats utförs den asynkront med hjälp av URLSession.

När den är klar söker den efter eventuella fel under begäran. Om ett fel inträffar loggar det motsvarande meddelande. Därefter verifieras http-svarets framgång, vilket säkerställer att det ligger inom intervallet 200 till 299 statuskoder. Därefter deserialiserar den mottagna JSON-data. Slutligen uppdateras loggningstexten, vilket anger lyckad åtkomst till API:et tillsammans med relevant HTTP-svarsinformation.