다음을 통해 공유


자습서: iOS(Swift) 앱에서 보호된 웹 API 호출

적용 대상: 흰색 확인 표시 기호가 있는 녹색 원. Workforce 테넌트 흰색 확인 표시 기호가 있는 녹색 원. 외부 테넌트 (자세히 알아보기)

Microsoft Entra ID를 사용하여 사용자를 로그인하고 보호된 웹 API를 호출하는 방법을 안내하는 자습서 시리즈의 네 번째 자습서입니다.

이 자습서에서는 다음을 수행합니다.

  • 보호된 웹 API를 호출합니다.

필수 구성 요소

API 호출

토큰이 있으면 앱이 HTTP 헤더에서 이를 사용하여 Microsoft Graph에 대한 권한 있는 요청을 수행할 수 있습니다.

헤더 키 가치
권한 부여 전달자 <액세스 토큰>

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

Microsoft Graph API에 대한 자세한 내용은 microsoft Graph API 참조하세요.

앱 테스트

테스트 디바이스 또는 시뮬레이터에 앱을 빌드하고 배포합니다. 로그인하여 Microsoft Entra ID 또는 개인 Microsoft 계정에 대한 토큰을 가져올 수 있어야 합니다.

사용자가 앱에 처음 로그인하면 요청된 권한에 동의하라는 Microsoft ID의 메시지가 표시됩니다. 대부분의 사용자는 동의할 수 있지만 일부 Microsoft Entra 테넌트는 사용자 동의를 사용하지 않도록 설정하여 관리자가 모든 사용자를 대신하여 동의해야 합니다. 이 시나리오를 지원하려면 앱의 범위를 등록합니다.

로그인하면 앱에 Microsoft Graph /me 엔드포인트에서 반환된 데이터가 표시됩니다.

다음 단계

다중 파트 시나리오 시리즈에서 보호된 웹 API를 호출하는 모바일 앱을 빌드하는 방법에 대해 자세히 알아봅니다.

Microsoft Entra 외부 ID를 사용하여 사용자를 로그인하고 보호된 웹 API를 호출하는 방법을 안내하는 자습서 시리즈의 네 번째 자습서입니다.

이 자습서에서는 다음을 수행합니다.

  • 보호된 웹 API를 호출합니다.

필수 구성 요소

  • 자습서: iOS(Swift) 모바일 앱 사용자 로그인

  • 하나 이상의 범위(위임된 권한) 및 하나의 앱 역할(애플리케이션 권한)(예: ToDoList.Read)을 노출하는 API 등록입니다. 이미 하지 않았다면, 샘플 iOS 모바일 앱 에서 API를 호출할 수 있도록 지침을 따라 기능이 보호된 ASP.NET Core 웹 API를 만드십시오. 다음 단계를 완료해야 합니다.

    • 웹 API 애플리케이션을 등록합니다.
    • API 범위를 구성합니다.
    • 앱 역할을 구성합니다.
    • 선택적 클레임을 구성합니다.
    • 샘플 Web API를 복제하거나 다운로드합니다.
    • 샘플 Web API를 구성하고 실행합니다.

API 호출

iOS 앱에서 보호된 웹 API를 호출하려면 다음 코드를 사용합니다.

    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 데이터를 역직렬화합니다. 마지막으로 로깅 텍스트를 업데이트하여 관련 HTTP 응답 세부 정보와 함께 API에 성공적으로 액세스했음을 나타냅니다.