자습서: Android 앱에서 웹 대체 지원
이 자습서에서는 isBrowserRequired()
오류가 발생하는 방법과 이 오류를 해결하는 방법을 보여 줍니다. 유틸리티 메서드 isBrowserRequired()
는 네이티브 인증이 기능적이고 안전한 방식으로 인증 흐름을 완료하기에 충분하지 않은 다양한 시나리오에 대한 대체 메커니즘의 필요성을 확인합니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
isBrowserRequired()
확인isBrowserRequired()
처리
필수 조건
- 샘플 네이티브 Android 모바일 애플리케이션에서 사용자 로그인의 단계를 완료합니다. 이 문서에서는 테넌트 설정을 사용하여 구성하는 샘플 Android를 실행하는 방법을 보여 줍니다.
- 자습서: 메일 일회용 암호로 로그인 및 로그아웃 추가의 단계를 완료합니다.
웹 대체
네이티브 인증으로 사용자 인증 흐름을 완료하기에 충분하지 않은 시나리오에는 웹 대체 메커니즘을 사용합니다.
Android SDK를 초기화할 때 모바일 애플리케이션에서 지원하는 oob 및 password 등의 챌린지 형식을 지정합니다.
클라이언트 앱이 Microsoft Entra에 필요한 챌린지 형식을 지원할 수 없는 경우 Microsoft Entra의 응답에는 클라이언트 앱이 브라우저에서 인증 흐름을 계속 진행해야 한다고 표시됩니다. 예를 들어 oob 챌린지 형식을 사용하여 SDK를 초기화하지만 Microsoft Entra 관리 센터에서 암호 인증 방법으로 메일을 사용하여 앱을 구성할 수 있습니다.
이 경우 유틸리티 메서드 isBrowserRequired()
는 true를 반환합니다.
샘플 흐름
isBrowserRequired()
를 반환하는 예제 흐름과 이 흐름을 처리하는 방법을 살펴보겠습니다.
초기화 중에 SDK에 전달하는 JSON 구성 파일에서 다음 코드 조각과 같이 oob 챌린지 형식만 추가합니다.
PublicClientApplication.createNativeAuthPublicClientApplication( requireContext(), R.raw.native_auth_config // JSON configuration file )
native_auth_config.json
구성에는 다음과 같은 코드 조각이 있습니다.{ "client_id" : "{Enter_the_Application_Id_Here}", "authorities" : [ { "type": "CIAM", "authority_url": "https://{Enter_the_Tenant_Subdomain_Here}.ciamlogin.com/{Enter_the_Tenant_Subdomain_Here}.onmicrosoft.com/" } ], "challenge_types" : ["oob"], "logging": { "pii_enabled": false, "log_level": "INFO", "logcat_enabled": true } }
Microsoft Entra 관리 센터에서 인증 방법으로 암호가 있는 메일을 사용하도록 사용자 흐름을 구성합니다.
SDK의
signUp(username)
메서드를 사용하여 가입 흐름을 시작합니다. Microsoft Entra에서 password 및 oob 챌린지 형식이 필요하지만 oob만으로 SDK를 구성했으므로isBrowserRequired()
검사를 통과하는SignUpError
가 표시됩니다.isBrowserRequired()
를 확인하고 처리하려면 다음 코드 조각을 사용합니다.val actionResult = authClient.signUp( username = email ) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { // Handle "browser required" error }
이 코드는 네이티브 인증을 통해 인증 흐름을 완료할 수 없으며 브라우저를 사용해야 함을 나타냅니다.
isBrowserRequired() 오류 처리
이 오류를 처리하려면 클라이언트 앱이 브라우저를 시작하고 인증 흐름을 다시 시작해야 합니다. MSAL(Microsoft 인증 라이브러리) acquireToken()
메서드를 사용하여 수행할 수 있습니다.
이렇게 하려면 다음 단계를 수행합니다.
이전에 등록한 앱에 리디렉션 URI를 추가하려면 플랫폼 리디렉션 URL 추가의 단계를 사용합니다.
클라이언트 앱의 구성 파일을 업데이트하려면 SDK 구성에서 리디렉션 URI 구성의 단계를 사용합니다.
다음 코드 조각으로
acquireToken()
메서드를 사용하여 토큰을 가져옵니다.val actionResult = authClient.signUp( username = email ) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { authClient.acquireToken( AcquireTokenParameters( AcquireTokenParameters.Builder() .startAuthorizationFromActivity(requireActivity()) .withScopes(getScopes()) .withCallback(getAuthInteractiveCallback()) ) // Result will contain account and tokens retrieved through the browser. ) }
네이티브 인증 흐름을 통해 얻는 ID 토큰, 액세스 토큰 및 새로 고침 토큰인 보안 토큰은 브라우저 위임 흐름을 통해 얻는 토큰과 동일합니다.
관련 콘텐츠
- iOS 샘플 앱을 실행하는 방법 알아보기
- 메일 일회용 암호를 사용한 네이티브 인증 API 참조 탐색
- 챌린지 형식에 대해 알아보기