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


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

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

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

Изучив это руководство, вы:

  • Проверьте isBrowserRequired()
  • Обработка isBrowserRequired()

Необходимые условия

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

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

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

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

В этом случае метод служебной программы 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 настройте поток пользователя, чтобы использовать Email с паролем в качестве метода проверки подлинности.

  3. Запустите поток регистрации с помощью метода signUp(parameters) пакета SDK. Вы получите SignUpError, который проходит проверку isBrowserRequired(), так как Microsoft Entra ожидает пароль и тип проверки oob, но вы настроили ваш SDK только с oob.

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

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

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

Ошибка Handle isBrowserRequired()

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

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

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

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

  3. Используйте следующий фрагмент кода для получения токена с помощью метода acquireToken().

    val parameters = NativeAuthSignUpParameters(username = email)
    val actionResult: SignUpResult = authClient.signUp(parameters)
    
    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.
        )
    } 
    

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

  • Узнайте, как запустить пример приложения iOS
  • Ознакомьтесь со справочными материалами по API нативной аутентификации с помощью однократного секретного кода электронной почты .
  • Узнайте о типах вызовов .