다음을 통해 공유


자습서: 웹 대체 지원

이 자습서에서는 네이티브 인증으로 사용자 흐름을 완료하기에 충분하지 않은 브라우저를 통해 토큰을 획득하는 방법을 보여 줍니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • BrowserRequired 오류를 확인합니다.
  • BrowserRequired 오류를 처리합니다.

필수 조건

브라우저 필요

BrowserRequired는 네이티브 인증이 사용자 흐름을 완료하는 데 충분하지 않은 다양한 시나리오에 대한 대체 메커니즘입니다.

애플리케이션의 안정성을 보장하고 인증 흐름이 중단되는 것을 방지하려면 SDK의 acquireToken() 메서드를 사용하여 브라우저에서 흐름을 계속하는 것이 좋습니다.

SDK를 초기화할 때 모바일 애플리케이션에서 지원할 수 있는 챌린지 유형을 지정해야 합니다. 다음은 SDK에서 허용하는 챌린지 유형 목록입니다.

  • OOB(대역 외): iOS 애플리케이션이 일회용 암호를 처리할 수 있는 경우(이 경우 이메일 코드) 이 챌린지 유형을 추가합니다.
  • 암호: 애플리케이션이 암호 기반 인증을 처리할 수 있는 경우 이 챌린지 유형을 추가합니다.

Microsoft Entra에 클라이언트가 제공할 수 없는 기능이 필요한 경우 BrowserRequired 오류가 반환됩니다. 예를 들어 챌린지 유형 OOB만 지정하여 SDK 인스턴스를 초기화하지만 Microsoft Entra 관리 센터에서는 애플리케이션이 암호가 포함된 이메일 사용자 흐름으로 구성되어 있다고 가정합니다. SDK 인스턴스에서 signUp(username) 메서드를 호출하면 Microsoft Entra가 SDK에 구성된 것과 다른 챌린지 유형(이 경우 암호)이 필요하기 때문에 BrowserRequired 오류가 발생합니다.

챌린지 유형이 부족한 것은 BrowserRequired가 발생할 수 있는 경우의 한 가지 예일 뿐입니다. BrowserRequired는 다양한 시나리오에서 발생할 수 있는 일반적인 대체 메커니즘입니다.

샘플 흐름

다음 코드 조각에서는 SDK 인스턴스 초기화 중에 챌린지 형식을 지정하는 방법을 확인할 수 있습니다.

nativeAuth = try MSALNativeAuthPublicClientApplication(
    clientId: "<client id>",
    tenantSubdomain: "<tenant subdomain>",
    challengeTypes: [.OOB]
)

이 경우 챌린지 유형 OOB만 지정합니다. Microsoft Entra 관리 센터에서 애플리케이션이 암호가 포함된 이메일 사용자 흐름으로 구성되어 있다고 가정합니다.

nativeAuth.signUp(username: email, delegate: self)

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        // handle browser required error
    }
}

SDK 인스턴스에서 signUp(username:delegate) 메서드를 호출하면 Microsoft Entra가 SDK에 구성된 것과 다른 챌린지 유형(이 경우 암호)이 필요하기 때문에 BrowserRequired 오류가 발생합니다.

BrowserRequired 오류 처리

이러한 종류의 오류를 처리하려면 브라우저를 시작하고 사용자가 여기서 인증 흐름을 수행하도록 해야 합니다. 이는 acquireToken() 메서드를 호출하여 수행할 수 있습니다. 이 메서드를 사용하려면 몇 가지 추가 구성을 수행해야 합니다.

이제 대화형으로 토큰 및 계정을 가져올 수 있습니다. 그 사용 방법의 예는 다음과 같습니다.

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        let webviewParams = MSALWebviewParameters(authPresentationViewController: self)
        let parameters = MSALInteractiveTokenParameters(scopes: ["User.Read"], webviewParameters: webviewParams)

        nativeAuth.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in
            // result will contain account and tokens retrieved in the browser
        }
    }
}

반환되는 토큰 및 계정은 네이티브 인증 흐름을 통해 검색되는 것과 동일합니다.