다음을 통해 공유


Android 앱이 Google Play 스토어에 게시된 후 인증 실패

이 문서에서는 사용자가 Google Play 스토어에 게시된 Android 앱을 설치한 후 로그인하는 동안 발생하는 인증 실패에 대한 솔루션을 제공합니다.

증상

다음과 같은 경우를 생각해볼 수 있습니다.

  • MSAL(Microsoft 인증 라이브러리)을 사용하여 Android 앱에서 Microsoft Entra 인증을 성공적으로 구현했습니다.
  • 앱이 빌드되고 실행되었으며 모든 QA 테스트를 통과했습니다.
  • Google Play 스토어에 앱을 게시합니다.

이 경우 사용자가 앱을 설치한 후에는 앱에 로그인할 때 인증이 작동하지 않습니다.

사용자에게 인증 오류 메시지를 노출하거나 오류 메시지를 팀에 보내도록 하면 다음 텍스트와 같은 오류 메시지가 발생할 수 있습니다.

구성 파일의 리디렉션 URI는 패키지 이름 및 서명 해시로 생성된 리디렉션 URI와 일치하지 않습니다. 구성 파일의 URI와 Azure Portal의 앱 등록을 확인하세요.

이 문제에 대한 또 다른 가능한 시나리오는 다음과 같습니다.

개발 및 QA 테스트 중에 지원되는 브로커를 사용하여 인증 및 SSO(Single Sign-On)를 처리하도록 앱을 설정합니다. 그러나 앱이 Google Play를 통해 배포되고 설치되면 앱은 더 이상 인증에 broker를 사용하지 않습니다.

원인

Android 애플리케이션이 디바이스에 설치하기 위해 빌드되면 APK 압축 패키지로 빌드된 다음 인증서로 서명됩니다. 이 인증서 서명은 애플리케이션을 빌드한 사람이 프라이빗 서명 키를 소유한 사람이 되도록 합니다. 이렇게 하면 해커가 원래 프라이빗 키로 버전에 서명할 수 없으므로 애플리케이션을 유해하게 수정할 수 없습니다.

이전에는 Android 개발자가 프라이빗 서명 키를 소유하고 유지 관리했습니다. 현재 Google Play 서비스는 Android 개발자를 위한 프라이빗 서명 키를 생성하고 유지 관리하여 Google의 보안 스토리지를 보장합니다. 개발자는 Google Play 서비스에서 업로드된 앱 번들의 신뢰성을 확인할 수 있도록 업로드 키를 유지 관리하지만 사용자가 디바이스에 앱을 설치할 때 실제 서명은 Google 소유의 서명 인증서에 의해 수행됩니다.

Android 네이티브 및 Microsoft 지원 인증 브로커용 MSAL은 설치된 애플리케이션의 공개 서명 해시를 사용하여 인증 중에 Android 운영 체제와 상호 작용할 때 이를 식별합니다.

Google Play를 통해 설치된 애플리케이션의 공개 서명 해시는 Google Play에 게시하기 전에 설치된 것과 다릅니다. 따라서 MSAL은 잘못된 서명 해시로 구성됩니다.

해결 방법

이 문제를 해결하려면 다음을 수행합니다.

MSAL 패키지 검사기 도구 또는 Google Play 콘솔에서 새 서명 해시 가져오기

MSAL 패키지 검사기 도구를 사용하거나 Google Play 콘솔에서 새 서명 해시를 가져올 수 있습니다.

MSAL 패키지 검사기를 설치하고 사용하려면 MSAL Android 네이티브 가이드용 패키지 검사를 참조 하세요.

Google Play 콘솔에서 서명 해시를 얻으려면 다음 단계를 수행합니다.

  1. Google Play 콘솔로 이동하여 Google 개발자 계정으로 로그인합니다.

  2. Google Play 콘솔에 있으면 영향을 받는 앱을 선택합니다.

  3. 왼쪽 탐색의 릴리스 범주 아래에서 설치 프로그램을 확장하고 앱 무결성을 선택합니다.

  4. 앱 서명 탭을 선택합니다. 앱 서명 키의 지문은 세 가지 변형으로 표시됩니다.

  5. SHA-1 인증서 지문복사하여 6단계의 $Thumbprint PowerShell 스크립트에 변수 값으로 붙여넣습니다.

  6. 다음 스크립트를 실행하여 MSAL에 필요한 base64로 인코딩된 지문을 가져옵니다.

    $Thumbprint = "paste your fingerprint here"
    $Thumbprint = $Thumbprint.Replace(":", "")
    
    $Bytes = [byte[]]::new($Thumbprint.Length / 2)
    
    For($i=0; $i -lt $Thumbprint.Length; $i+=2){
        $Bytes[$i/2] = [convert]::ToByte($Thumbprint.Substring($i, 2), 16)
    }
    
    $hashedString =[Convert]::ToBase64String($Bytes)
    
    Write-Host $hashedString
    

Google Play 콘솔에서 서명 해시를 가져오는 방법을 보여 주는 스크린샷

새 서명 해시를 사용하여 Azure Portal의 앱 등록에 새 리디렉션 URI 추가

참고

기존 리디렉션 URI를 수정하는 대신 새 리디렉션 URI를 추가하는 것이 좋습니다. 앱 등록에는 많은 리디렉션 URI가 포함될 수 있습니다. 또한 기존 리디렉션 URI를 수정하면 앱의 개발 버전에 문제가 발생할 수 있습니다. 이로 인해 문제 해결, 개발 업데이트 등에서 문제가 발생할 수 있습니다.

  1. Azure Portal에 로그인하고 앱 등록 페이지로 이동합니다.

  2. Android 앱에 대한 앱 등록을 선택합니다.

  3. 관리에서 인증을 선택합니다.

  4. 플랫폼 구성에서 플랫폼 추가를 선택합니다.

  5. 플랫폼 구성에서 Android 선택합니다.

    Android 플랫폼을 구성하는 방법을 보여 주는 스크린샷

  6. Android 앱의 패키지 이름을 입력합니다. 또한 서명 해시를 생성하고 입력합니다.

    Android 앱을 구성하는 방법을 보여 주는 스크린샷

    참고

    서명 해시가 다르면 여러 Android 리디렉션 URI에서 동일한 패키지 이름을 사용하는 것이 좋습니다.

  7. 구성을 선택하여 플랫폼 구성을 완료합니다.

새 리디렉션 URI 및 서명 해시를 사용하도록 애플리케이션 코드 내에서 MSAL 구성 업데이트

애플리케이션 코드에서 MSAL 구성 파일 및 Android 매니페스트 파일을 업데이트합니다.

  • MSAL 구성 파일:

    리디렉션 URI만 변경합니다. Azure Portal에서 직접 복사하여 붙여넣습니다. Azure Portal에서 리디렉션 URI의 서명 해시 부분은 HTTP로 인코딩됩니다. HTTP 인코딩된 상태로 유지되어야 합니다.

    {
        "client_id": "<Client ID>",
        "authorization_user_agent": "DEFAULT",
        "redirect_uri": "<Redirect URI>"
        "broker_redirect_uri_registered": true,
        "authorities": [
            {
                "types": "AAD",
                "audience": {
                    "type": "AzureADMyOrg",
                    "tenant_id": "<Tenant ID>"
                }
            }
        ],
        "logging":{
            "log_level": "VERBOSE",
            "logcat_enabled": true
        }
    }
    
  • Android 매니페스트 파일:

    활동의 속성만 변경 android:path 합니다 com.microsoft.identity.client.BrowserTabActivity . 서명 해시를 이 속성의 값으로 붙여넣습니다.

    <activity
        android:name="com.microsoft.identity.client.BrowserTabActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:schema="msauth"
                android:host="com.example.azureauthsso1"
                android:path="android_path" />
        </intent-filter>
    </activity>
    

    참고

    • 서명 해시 앞에 슬래시를 포함해야 합니다.
    • 리디렉션 URI와 달리 여기에 있는 서명 해시는 HTTP로 인코딩되지 않습니다.

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.