Поделиться через


Руководство. Вызов защищенного веб-API в приложении iOS (Swift)

Это четвертое руководство в серии учебников, которое поможет вам войти в систему пользователей и вызвать защищенный веб-API с помощью Внешняя идентификация Microsoft Entra.

В этом руководстве вы выполните следующие действия.

  • Вызов защищенного веб-API.

Необходимые компоненты

  • Руководство. Вход пользователей в мобильное приложение iOS (Swift)

  • Регистрация API, которая предоставляет по крайней мере одну область (делегированные разрешения) и одну роль приложения (разрешение приложения), например ToDoList.Read. Если вы еще не сделали этого, следуйте инструкциям по вызову API в примере мобильного приложения iOS, чтобы иметь функциональный защищенный веб-API ASP.NET Core. Убедитесь, что выполните следующие действия.

    • Регистрация приложения веб-API.
    • Настройка областей API.
    • Настройка ролей приложения.
    • Настройте необязательные утверждения.
    • Клонирование или скачивание примера веб-API.
    • Настройте и запустите пример веб-API.

Вызов API

Чтобы вызвать защищенный веб-API из приложения iOS, используйте следующий код:

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

Код задает конечную точку API, обеспечивая его допустимость. Затем он создает объект запроса, задав заголовок авторизации с полученным маркером доступа. После ведения журнала запуска запроса он выполняет запрос асинхронно с помощью URLSession.

По завершении он проверяет наличие ошибок во время запроса. Если возникает ошибка, он записывает соответствующее сообщение. Затем он проверяет успешность http-ответа, гарантируя, что он попадает в диапазон от 200 до 299 кодов состояния. После этого десериализирует полученные данные JSON. Наконец, он обновляет текст ведения журнала, указывающий на успешный доступ к API вместе с соответствующими сведениями о HTTP-ответе.