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


Руководство по поддержке веб-резервного размещения в приложении Android

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

В этом руководстве описано следующее:

  • Проверка isBrowserRequired()
  • Ручка isBrowserRequired()

Необходимые компоненты

Резервный веб-сервер

Используйте резервный механизм веб-размещения для сценариев, в которых собственная проверка подлинности недостаточно для завершения потока проверки подлинности пользователей.

При инициализации пакета SDK для Android вы указываете типы проблем, поддерживаемые мобильным приложением, например oob и пароль.

Если клиентское приложение не может поддерживать тип вызова, который требуется Microsoft Entra, ответ Microsoft Entra указывает, что клиентское приложение должно продолжать поток проверки подлинности в браузере. Например, вы инициализируете пакет SDK с типом вызова oob , но в Центре администрирования Microsoft Entra вы настраиваете приложение с помощью электронной почты с помощью метода проверки подлинности паролей.

В этом случае метод isBrowserRequired() служебной программы возвращает значение true.

Пример потока

Рассмотрим пример потока, который возвращается isBrowserRequired(), и как его можно обрабатывать:

  1. В файле конфигурации JSON, который передается пакету SDK во время инициализации, добавьте только тип вызова 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
      }
    } 
    
  2. В Центре администрирования Microsoft Entra настройте поток пользователя для использования электронной почты с паролем в качестве метода проверки подлинности.

  3. Запустите поток регистрации с помощью метода ПАКЕТА SDK signUp(username) . Вы получаете проверку, isBrowserRequired() так как Microsoft Entra ожидает пароль и тип вызова oob, но вы настроили пакет SDK только для oob.SignUpError

  4. Чтобы проверить и обработать isBrowserRequired()код, используйте следующий фрагмент кода:

    val actionResult = authClient.signUp( 
        username = email 
    ) 
    if (actionResult is SignUpError && actionResult.isBrowserRequired()) { 
        // Handle "browser required" error
    } 
    

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

Ошибка Handle isBrowserRequired()

Чтобы обработать эту ошибку, клиентское приложение необходимо запустить браузер и перезапустить поток проверки подлинности. Можно выполнить с помощью метода библиотеки проверки подлинности Майкрософт (MSAL acquireToken() ).

Для этого выполните следующие действия.

  1. Чтобы добавить URI перенаправления в приложение, зарегистрированное ранее, выполните действия, описанные в разделе "Добавление URL-адреса перенаправления платформы".

  2. Чтобы обновить файл конфигурации клиентского приложения, выполните действия, описанные в разделе "Настройка URI перенаправления" в конфигурации пакета SDK.

  3. Используйте следующий фрагмент кода для получения маркера 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.
        )
    } 
    

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