Udostępnij za pośrednictwem


Samouczek: wywoływanie chronionego internetowego interfejsu API w aplikacji systemu iOS (Swift)

Jest to czwarty samouczek z serii samouczków, który przeprowadzi Cię przez proces logowania użytkowników i wywoływania chronionego internetowego interfejsu API przy użyciu Tożsamość zewnętrzna Microsoft Entra.

W tym samouczku wykonasz następujące elementy:

  • Wywoływanie chronionego internetowego interfejsu API.

Wymagania wstępne

  • Samouczek: logowanie użytkowników w aplikacji mobilnej systemu iOS (Swift)

  • Rejestracja interfejsu API, która uwidacznia co najmniej jeden zakres (uprawnienia delegowane) i jedną rolę aplikacji (uprawnienie aplikacji), taką jak ToDoList.Read. Jeśli jeszcze tego nie zrobiono, postępuj zgodnie z instrukcjami dotyczącymi wywoływania interfejsu API w przykładowej aplikacji mobilnej systemu iOS, aby mieć funkcjonalny chroniony interfejs API sieci Web ASP.NET Core. Upewnij się, że wykonasz następujące kroki:

    • Rejestrowanie aplikacji internetowego interfejsu API.
    • Konfigurowanie zakresów interfejsu API.
    • Konfigurowanie ról aplikacji.
    • Konfigurowanie opcjonalnych oświadczeń.
    • Sklonuj lub pobierz przykładowy internetowy interfejs API.
    • Konfigurowanie i uruchamianie przykładowego internetowego interfejsu API.

Wywoływanie interfejsu API

Aby wywołać chroniony internetowy interfejs API z aplikacji systemu iOS, użyj następującego kodu:

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

Kod określa punkt końcowy interfejsu API, zapewniając jego ważność. Następnie tworzy obiekt żądania, ustawiając nagłówek autoryzacji przy użyciu uzyskanego tokenu dostępu. Po zalogowaniu inicjowania żądania wykonuje żądanie asynchronicznie przy użyciu polecenia URLSession.

Po zakończeniu sprawdza wszelkie błędy podczas żądania. Jeśli wystąpi błąd, rejestruje odpowiedni komunikat. Następnie sprawdza powodzenie odpowiedzi HTTP, zapewniając, że mieści się w zakresie od 200 do 299 kodów stanu. Następnie deserializuje odebrane dane JSON. Na koniec aktualizuje tekst rejestrowania wskazujący pomyślny dostęp do interfejsu API wraz z odpowiednimi szczegółami odpowiedzi HTTP.