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 ID.
In deze zelfstudie gaat u het volgende doen:
- Een beveiligde web-API aanroepen.
Voorwaarden
API aanroepen
Zodra u een token hebt, kan uw app deze gebruiken in de HTTP-header om een geautoriseerde aanvraag naar Microsoft Graph te verzenden:
header-sleutel | waarde |
---|---|
Machtiging | Bearer <toegangstoken> |
Voeg de volgende code toe aan de klasse 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()
}
Zie Microsoft Graph API voor meer informatie over de Microsoft Graph API.
Uw app testen
Bouw en implementeer de app op een testapparaat of simulator. U moet zich kunnen aanmelden en tokens ophalen voor Microsoft Entra ID of persoonlijke Microsoft-accounts.
De eerste keer dat een gebruiker zich aanmeldt bij uw app, wordt deze door Microsoft-identiteit gevraagd om toestemming te geven voor de aangevraagde machtigingen. Hoewel de meeste gebruikers toestemming kunnen geven, hebben sommige Microsoft Entra-tenants gebruikerstoestemming uitgeschakeld. Hiervoor moeten beheerders toestemming geven namens alle gebruikers. Registreer de scopes van uw app om dit scenario te ondersteunen.
Nadat u zich hebt aangemeld, worden de gegevens weergegeven die van het Microsoft Graph /me
-eindpunt zijn verkregen.
Volgende stappen
Meer informatie over het bouwen van mobiele apps die beveiligde web-API's aanroepen in onze reeks scenario's met meerdere onderdelen.
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 externe Microsoft Entra-id.
In deze zelfstudie gaat u het volgende doen:
- Een beveiligde web-API aanroepen.
Voorwaarden
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 een API aanroepen in een mobiele iOS-voorbeeld-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 ofwel download voorbeeld web-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 u de start van de aanvraag hebt 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.