MSAL을 사용하여 Android에서 앱 간 SSO 사용
SSO(Single Sign-On)를 사용하면 사용자가 자격 증명을 한 번만 입력하고 해당 자격 증명이 애플리케이션에서 자동으로 작동하도록 할 수 있습니다. 사용자가 관리해야 하는 암호 수를 줄이고 암호 피로 및 관련 취약성의 위험을 줄여 사용자 환경을 향상시키고 보안을 향상시킵니다.
Microsoft ID 플랫폼 및 MSAL(Microsoft 인증 라이브러리)을 사용하면 애플리케이션 제품군에서 SSO를 사용하도록 설정할 수 있습니다. 브로커 기능을 사용하도록 설정하면 전체 디바이스에서 SSO를 확장할 수 있습니다.
이 방법에서는 고객에게 SSO를 제공하도록 애플리케이션에서 사용하는 SDK를 구성하는 방법에 대해 알아봅니다.
필수 조건
이 방법에서는 다음 작업을 수행하는 방법을 알고 있다고 가정합니다.
- 앱을 프로비전합니다. 자세한 내용은 Android 자습서의 앱 만들기 지침을 참조하세요.
- Android용 MSAL과 애플리케이션 통합
SSO에 대한 방법
Android용 MSAL을 사용하는 애플리케이션은 다음 두 가지 방법으로 SSO를 구현할 수 있습니다.
브로커 애플리케이션을 통해
시스템 브라우저를 통해
디바이스 전체 SSO, 계정 관리, 조건부 액세스 등의 이점을 위해 브로커 애플리케이션을 사용하는 것이 좋습니다. 그러나 사용자는 추가 애플리케이션을 다운로드해야 합니다.
조정된 인증을 통한 SSO
Microsoft의 인증 브로커 중 하나를 사용하여 디바이스 전체 SSO에 참여하고 조직의 조건부 액세스 정책을 충족하는 것이 좋습니다. 브로커와 통합하면 다음과 같은 이점이 있습니다.
- 디바이스 SSO
- 다음을 위한 조건부 액세스:
- Intune 앱 보호
- 디바이스 등록(Workplace Join)
- 모바일 디바이스 관리
- 디바이스 전체 계정 관리
- Android AccountManager 및 계정 설정을 통해
- "회사 계정" - 사용자 지정 계정 형식
Android에서 Microsoft 인증 브로커는 Microsoft Authenticator, Intune 회사 포털 및 Windows 앱 링크에 포함된 구성 요소입니다.
다음 다이어그램에서는 앱, MSAL 및 Microsoft의 인증 브로커 간 관계를 보여 줍니다.
브로커를 호스트하는 앱 설치
브로커 호스팅 앱은 언제든지 디바이스 소유자가 앱 스토어(일반적으로 Google Play 스토어)에서 설치할 수 있습니다. 그러나 일부 API(리소스)는 디바이스에 다음을 요구하는 조건부 액세스 정책에 의해 보호됩니다.
- 등록됨(작업 공간에 연결됨) 및/또는
- 디바이스 관리에 등록됨
- Intune 앱 보호에 등록됨
위에서 언급한 요구 사항이 있는 디바이스에 브로커 앱이 아직 설치되어 있지 않은 경우 MSAL은 앱이 대화형으로 토큰을 가져오려고 시도하는 즉시 설치하도록 사용자에게 지시합니다. 그러면 앱은 디바이스가 필요한 정책을 준수하도록 하는 단계를 통해 사용자를 안내합니다. 정책 요구 사항이 없거나 사용자가 Microsoft 계정으로 로그인하는 경우 브로커 앱 설치가 필요하지 않습니다.
브로커 설치 및 제거의 효과
브로커 설치 시
브로커가 디바이스에 설치되면 이후의 모든 대화형 토큰 요청(acquireToken()
에 대한 호출)이 MSAL에서 로컬로 처리되지 않고 브로커에서 처리됩니다. 이전에 MSAL에서 사용할 수 있었던 SSO 상태는 브로커에서 사용할 수 없습니다. 따라서 사용자는 다시 인증하거나 디바이스에 알려진 기존 계정 목록에서 계정을 선택해야 합니다.
브로커를 설치할 때 사용자가 다시 로그인할 필요는 없습니다. 사용자가 MsalUiRequiredException
을 해결해야 하는 경우에만 다음 요청이 브로커로 이동합니다. MsalUiRequiredException
은 여러 가지 이유로 발생할 수 있으며 대화식으로 해결해야 합니다. 예시:
- 사용자가 자신의 계정과 연결된 암호를 변경했습니다.
- 사용자의 계정이 더 이상 조건부 액세스 정책을 충족하지 않습니다.
- 사용자가 앱과 계정 연결에 대한 동의를 취소했습니다.
여러 브로커 - 디바이스에 여러 브로커가 설치된 경우 MSAL은 인증 프로세스를 완료하기 위해 활성 브로커를 자체적으로 식별합니다.
브로커 제거 시
브로커 호스팅 앱이 하나만 설치되어 있고 제거된 경우 사용자는 다시 로그인해야 합니다. 활성 브로커를 제거하면 디바이스에서 계정과 관련 토큰이 제거됩니다.
Microsoft Authenticator, Intune 회사 포털 또는 Windows에 대한 링크가 제거되면 사용자에게 다시 로그인 하라고 물을 수 있습니다.
브로커와 통합
브로커에 대한 리디렉션 URI 생성
팁
이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.
브로커와 호환되는 리디렉션 URI를 등록해야 합니다. 브로커의 리디렉션 URI에는 앱의 패키지 이름과 앱 서명의 Base64로 인코딩된 표현이 포함되어야 합니다.
리디렉션 URI의 형식은 msauth://<yourpackagename>/<base64urlencodedsignature>
입니다.
keytool을 사용하여 앱의 서명 키로 Base64로 인코딩된 서명 해시를 생성한 다음, 해당 해시로 리디렉션 URI를 생성할 수 있습니다.
Linux 및 macOS:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Windows:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
keytool을 사용하여 서명 해시를 생성했으면 Azure Portal을 사용하여 리디렉션 URI를 생성합니다.
- 최소한 클라우드 애플리케이션 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 앱 등록이 포함된 테넌트로 전환합니다.
- ID>애플리케이션>앱 등록으로 이동합니다.
- 애플리케이션을 선택한 다음 인증>플랫폼 추가>Android를 선택합니다.
- Android 앱 구성 창이 열리면 앞서 생성한 서명 해시와 패키지 이름을 입력합니다.
- 구성 단추를 클릭합니다.
리디렉션 URI가 생성되어 Android 구성 창의 리디렉션 URI 필드에 표시됩니다.
앱에 서명하는 방법에 대한 자세한 내용은 Android Studio 사용자 가이드의 앱에 서명을 참조하세요.
브로커를 사용하도록 MSAL 구성
앱에서 브로커를 사용하려면 브로커 리디렉션을 구성했음을 인증해야 합니다. 예를 들어 MSAL 구성 파일에 다음 설정을 포함하여 브로커 사용 리디렉션 URI를 모두 포함하고 등록했음을 표시합니다.
"redirect_uri" : "<yourbrokerredirecturi>",
"broker_redirect_uri_registered": true
브로커 관련 예외
MSAL은 다음 두 가지 방법으로 브로커와 통신합니다.
- 브로커에 바인딩된 서비스
- Android AccountManager
이 서비스를 호출하는 데 Android 권한이 필요하지 않으므로 MSAL은 먼저 브로커에 바인딩 서비스를 사용합니다. 바인딩된 서비스에 대한 바인딩이 실패하면 MSAL은 Android AccountManager API를 사용합니다. 단, 앱에 "READ_CONTACTS"
권한이 이미 부여된 경우에 한합니다.
오류 코드 "BROKER_BIND_FAILURE"
와 함께 MsalClientException
이 표시될 경우 두 가지 옵션이 있습니다.
- 사용자에게 Microsoft Authenticator 앱과 Intune 회사 포털에 전원 최적화를 사용하지 않도록 설정할 것을 요청합니다.
- 사용자에게
"READ_CONTACTS"
권한 부여를 요청합니다.
브로커 통합 확인
브로커 통합 작동 여부가 분명하지 않을 경우 다음 단계를 사용하여 확인할 수 있습니다.
- Android 디바이스에서 브로커를 사용하여 요청을 완료합니다.
- Android 디바이스의 설정에서 인증한 계정에 해당하는 새로 만든 계정을 찾습니다. 계정은 회사 계정 형식이어야 합니다.
테스트를 반복하려는 경우 설정에서 계정을 제거할 수 있습니다.
시스템 브라우저를 통한 SSO
Android 애플리케이션에는 인증 사용자 환경을 위해 WEBVIEW
, 시스템 브라우저 또는 Chrome 사용자 지정 탭을 사용할 수 있는 옵션이 있습니다. 애플리케이션이 조정된 인증을 사용하지 않는 경우 SSO를 달성하려면 네이티브 웹 보기 대신 시스템 브라우저를 사용해야 합니다.
권한 부여 에이전트
권한 부여 에이전트에 대한 특정 전략을 선택하는 것이 중요하며 앱이 사용자 지정할 수 있는 추가 기능을 나타냅니다. 'WEBVIEW'를 사용하는 것이 좋습니다. 다른 구성 값에 대한 자세한 내용은 Android MSAL 구성 파일이해를 참조하세요.
MSAL은 WEBVIEW
또는 시스템 브라우저를 사용한 권한 부여를 지원합니다. 아래 이미지는 WEBVIEW
또는 CustomTabs가 있거나 CustomTabs가 없는 시스템 브라우저를 사용하는 모습을 보여줍니다.
SSO 영향
애플리케이션이 조정된 인증과 앱에 통합하지 않고 WEBVIEW
전략을 사용하는 경우 사용자는 디바이스 간 또는 네이티브 앱과 웹앱 간에 Single Sign-On 환경을 갖지 않습니다.
애플리케이션은 MSAL과 통합되어 BROWSER
를 사용하여 권한을 부여할 수 있습니다. WEBVIEW와 달리 BROWSER
(은)는 사용자 지정 탭과 통합된 웹 또는 기타 네이티브 앱에서 더 적은 로그인을 가능하게 하는 기본 시스템 브라우저와 쿠키 병을 공유합니다.
애플리케이션이 Microsoft Authenticator, Intune 회사 포털 또는 Windows 링크와 같은 브로커와 함께 MSAL을 사용하는 경우 사용자는 앱 중 하나로 활성 로그인이 있는 경우 애플리케이션 간에 SSO 환경을 가질 수 있습니다.
참고 항목
브로커를 사용하는 MSAL은 WebView를 활용하고 MSAL 라이브러리를 사용하고 조정된 인증에 참여하는 모든 애플리케이션에 대해 SSO(Single Sign-On)를 제공합니다. 브로커의 SSO 상태는 MSAL을 사용하지 않는 다른 앱으로 확장되지 않습니다.
WebView
앱 내 WebView를 사용하려면 MSAL에 전달되는 앱 구성 JSON에 다음 줄을 입력합니다.
"authorization_user_agent" : "WEBVIEW"
앱 내 WEBVIEW
를 사용하면 사용자가 앱에 직접 로그인합니다. 토큰은 앱의 샌드박스 안에 보관되며 앱의 쿠키 보관함 밖에서는 사용할 수 없습니다. 따라서 앱이 Microsoft Authenticator 앱, Intune 회사 포털 또는 Windows에 연결과 통합되지 않는 한 사용자는 애플리케이션 간에 SSO 환경을 가질 수 없습니다.
그러나 WEBVIEW
에서는 로그인 UI의 모양과 느낌을 사용자 지정할 수 있는 기능을 제공합니다. 이 사용자 지정 방법에 대한 자세한 내용은 Android WebView를 참조하세요.
브라우저
브라우저 및 사용자 지정 탭 전략을 사용하는 옵션을 제공하지만 WEBVIEW를 사용하는 것이 좋습니다. 사용자 지정 구성 파일에서 다음 JSON 구성을 사용하여 이 전략을 명시적으로 나타낼 수 있습니다.
"authorization_user_agent" : "BROWSER"
이 접근 방식을 사용하여 디바이스의 브라우저를 통해 SSO 환경을 제공합니다. MSAL은 다른 네이티브 앱 또는 웹앱이 MSAL에서 설정한 지속 세션 쿠키를 사용하여 디바이스에서 SSO를 구현할 수 있게 하는 공유 쿠키 보관함을 사용합니다.
브라우저 선택 추론
다양한 Android 휴대폰에서 사용할 정확한 브라우저 패키지를 지정할 수 없으므로 MSAL은 최상의 디바이스 간 SSO 제공을 시도하는 브라우저 선택 추론을 구현합니다.
MSAL은 주로 패키지 관리자에서 기본 브라우저를 검색하고 테스트를 거친 안전한 브라우저 목록에 있는지 확인합니다. 없으면 MSAL은 안전 목록에서 기본이 아닌 다른 브라우저를 시작하지 않고 Webview를 사용합니다. 기본 브라우저는 사용자 지정 탭을 지원하는지 여부에 관계없이 선택됩니다. 브라우저에서 사용자 지정 탭을 지원하는 경우 MSAL은 사용자 지정 탭을 시작합니다. 사용자 지정 탭은 앱 내 WebView
의 모양과 느낌을 더 가깝게 표시하며 기본 UI 사용자 지정을 허용합니다. 자세한 내용은 Android의 Custom Tabs를 참조하세요.
디바이스에 브라우저 패키지가 없는 경우 MSAL은 앱 내 WebView
를 사용합니다. 디바이스 기본 설정이 변경되지 않은 경우 SSO 환경 보장을 위해 로그인할 때마다 동일한 브라우저가 시작되어야 합니다.
테스트된 브라우저
다음 브라우저는 구성 파일에 지정된 "redirect_uri"
로 올바르게 리디렉션되는지 확인하는 테스트를 거쳤습니다.
장치 | 기본 제공 브라우저 | Chrome | Opera | Microsoft Edge | UC 브라우저 | Firefox |
---|---|---|---|---|---|---|
Nexus 4(API 17) | pass | pass | 적용할 수 없음 | 적용할 수 없음 | 적용할 수 없음 | 적용할 수 없음 |
Samsung S7(API 25) | pass1 | pass | pass | pass | fail | pass |
Vivo(API 26) | pass | pass | pass | pass | pass | fail |
Pixel 2(API 26) | pass | pass | pass | pass | fail | pass |
Oppo | pass | 해당 사항 없음2 | 적용할 수 없음 | 적용할 수 없음 | 적용할 수 없음 | 적용할 수 없음 |
OnePlus(API 25) | pass | pass | pass | pass | fail | pass |
Nexus(API 28) | pass | pass | pass | pass | fail | pass |
MI | pass | pass | pass | pass | fail | pass |
1Samsung의 기본 제공 브라우저는 Samsung 인터넷입니다.
2Oppo 디바이스 설정 내에서 기본 브라우저를 변경할 수 없습니다.
다음 단계
Android 디바이스용 공유 디바이스 모드를 사용하면 여러 직원이 쉽게 공유할 수 있도록 Android 디바이스를 구성할 수 있습니다.
브로커 애플리케이션에 대한 자세한 내용은 다음 페이지로 이동하세요.