Поделиться через


Проверка подлинности завершается ошибкой после публикации приложения Android в Магазине Google Play

В этой статье описано решение о сбое проверки подлинности, которое возникает при входе после установки приложения Android, опубликованного в Магазине Google Play.

Симптомы

Рассмотрим следующий сценарий.

  • Вы успешно реализовали проверку подлинности Microsoft Entra в приложении Android с помощью библиотеки проверки подлинности Майкрософт (MSAL).
  • Приложение было создано и выполнено и прошло все тестирование качества обслуживания.
  • Вы публикуете приложение в Google Play Store.

В этом случае после установки приложения проверка подлинности не работает при входе в приложение.

Если вы предоставляете пользователям сообщения об ошибках проверки подлинности или позволяете им отправлять сообщения об ошибках в свою команду, может возникнуть сообщение об ошибке, например следующий текст:

URI перенаправления в файле конфигурации не соответствует созданному с именем пакета и хэшом подписи. Проверьте URI в файле конфигурации и регистрации приложения в портал Azure.

Другой возможный сценарий для этой проблемы:

Во время разработки и тестирования QA вы настроили приложение для обработки проверки подлинности и единого входа с помощью поддерживаемого брокера. Однако после развертывания приложения через Google Play и установки приложение больше не использует брокер для проверки подлинности.

Причина

Когда приложение Android создается для установки на устройстве, оно создается как сжатый пакет APK, а затем подписан сертификатом. Подписывание сертификата гарантирует, что пользователь, созданный приложением, является владельцем закрытого ключа подписи. Это запрещает хакерам вносить вредоносные изменения в приложение, так как они не могут подписывать свои версии с исходным закрытым ключом.

Ранее разработчики Android владели и поддерживали свои закрытые ключи подписывания. В настоящее время службы Google Play создают и поддерживают закрытый ключ подписи для разработчиков Android, обеспечивая безопасное хранение Google. Разработчик по-прежнему сохраняет ключ отправки, чтобы службы Google Play могли проверить подлинность отправленного пакета приложений, но фактическая подпись выполняется сертификатом подписи Google при установке приложения на своих устройствах.

MSAL для Android Native и брокеры проверки подлинности служба поддержки Майкрософт используют хэш общедоступной подписи установленного приложения для идентификации при взаимодействии с операционной системой Android во время проверки подлинности.

Хэш общедоступной подписи приложения, установленного через Google Play, отличается от установленного перед публикацией в Google Play. Таким образом, MSAL будет настроен с неправильным хэшом сигнатуры.

Решение

Чтобы устранить эту проблему, выполните следующие действия.

Получение нового хэша подписи с помощью средства инспектора пакетов MSAL или из консоли Google Play

Вы можете получить новый хэш подписи с помощью средства инспектора пакетов MSAL или из консоли Google Play.

Сведения об установке и использовании инспектора пакетов MSAL см . в разделе "Инспектор пакетов" для MSAL Android Native Guide.

Чтобы получить хэш подписи из консоли Google Play, выполните следующие действия.

  1. Перейдите в консоль Google Play и войдите с помощью учетной записи разработчика Google.

  2. После того как вы находитесь в консоли Google Play, выберите затронутое приложение.

  3. В левой области навигации в категории "Выпуск " разверните узел "Настройка" и выберите " Целостность приложений".

  4. Перейдите на вкладку подписывания приложения. Вы увидите отпечаток ключа подписи приложения в трех разных вариантах.

  5. Скопируйте отпечаток сертификата SHA-1 и вставьте его в скрипт PowerShell на шаге 6 в качестве значения переменной$Thumbprint.

  6. Выполните следующий скрипт, чтобы получить отпечаток в кодировке Base64, необходимый MSAL:

    $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.

Добавление нового URI перенаправления в регистрацию приложения в портал Azure с новым хэшом подписи

Примечание.

Рекомендуется добавить новый URI перенаправления, а не изменить существующий. Регистрация приложения может содержать множество URI перенаправления. Кроме того, изменение существующего URI перенаправления может привести к проблемам с версией разработки приложения. Это может привести к проблемам во время устранения неполадок, обновлений разработки и т. д.

  1. Войдите в портал Azure и перейдите на страницу Регистрация приложений.

  2. Выберите регистрацию приложения для приложения Android.

  3. В разделе Управление выберите Проверка подлинности.

  4. В разделе Конфигурации платформ щелкните Добавить платформу.

  5. В разделе "Настройка платформ" выберите Android.

    Снимок экрана: настройка платформы Android.

  6. Введите имя пакета приложения Android. Кроме того, создайте и введите хэш подписи.

    Снимок экрана, на котором показано, как настроить приложение Android.

    Примечание.

    Это нормально использовать одно и то же имя пакета в нескольких URI перенаправления Android, если хэш подписи отличается.

  7. Нажмите кнопку Настроить, чтобы завершить настройку платформы.

Обновите конфигурацию MSAL в коде приложения, чтобы использовать новый URI перенаправления и хэш сигнатуры

Обновите файл конфигурации MSAL и файл манифеста Android в коде приложения.

  • ФАЙЛ конфигурации MSAL:

    Измените только универсальный код ресурса (URI) перенаправления. Скопируйте и вставьте его непосредственно из портал Azure. В портал Azure хэш-часть хэша сигнатуры 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.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.