적용 대상: Workforce 테넌트
외부 테넌트 (자세히 알아보기)
Microsoft Entra ID를 사용하여 사용자를 로그인하고 보호된 웹 API를 호출하는 방법을 안내하는 자습서 시리즈의 네 번째 자습서입니다.
이 자습서에서는 다음을 수행합니다.
- 보호된 웹 API를 호출합니다.
필수 구성 요소
- 자습서: iOS(Swift) 모바일 앱 사용자 로그인
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에 성공적으로 액세스했음을 나타냅니다.
관련 콘텐츠
- 샘플 iOS(Swift) 모바일 앱 사용자 로그인
- 네이티브 인증 사용하여 사용자 로그인 및 샘플 iOS 모바일 앱에서 API 호출
- 자습서: iOS/macOS 앱을 네이티브 인증에 대비하기