다음을 통해 공유


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

적용 대상: 이 내용은 워크포스 테넌트에 적용됩니다. 흰색 체크 표시가 있는 녹색 원으로 표시됩니다.이 내용은 외부 테넌트에 적용됩니다. 흰색 체크 표시가 있는 녹색 원으로 표시됩니다. 외부 테넌트(자세한 정보)

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에 성공적으로 액세스했음을 나타냅니다.