Udostępnij za pośrednictwem


Samouczek: Obsługa webowego rozwiązania awaryjnego w aplikacji Androida

Dotyczy: Biały okrąg z szarym symbolem X. Najemcy usługi Workforce Zielony okrąg z białym znacznikiem wyboru. Najemcy zewnętrzni (dowiedz się więcej)

W tym samouczku pokazano, jak pojawia się błąd isBrowserRequired() i jak go rozwiązać. Metoda narzędzia isBrowserRequired() sprawdza potrzebę rezerwowego mechanizmu w różnych scenariuszach, w których uwierzytelnianie natywne nie jest wystarczające do ukończenia przepływu uwierzytelniania w sposób funkcjonalny i bezpieczny.

W tym samouczku nauczysz się następujących rzeczy:

  • Sprawdź isBrowserRequired()
  • Uchwyt isBrowserRequired()

Warunki wstępne

Alternatywa dla sieci Web

Użyj mechanizmu awaryjnego webowego w scenariuszach, w których uwierzytelnianie natywne nie jest wystarczające do ukończenia przepływu uwierzytelniania użytkownika.

Podczas inicjowania zestawu SDK systemu Android należy określić typy wyzwań obsługiwane przez aplikację mobilną, takie jak oob i hasło .

Jeśli aplikacja kliencka nie może obsługiwać typu wyzwania wymaganego przez firmę Microsoft Entra, odpowiedź firmy Microsoft Entra wskazuje, że aplikacja kliencka musi kontynuować przepływ uwierzytelniania w przeglądarce. Na przykład inicjujesz SDK za pomocą typu wyzwania oob, ale w centrum administracyjnym Microsoft Entra konfigurujesz aplikację, używając metody uwierzytelniania przez e-mail i hasło.

W tym przypadku metoda narzędzia isBrowserRequired() zwraca wartość true.

Przykładowy przepływ

Przyjrzyjmy się przykładowemu przepływowi, który zwraca isBrowserRequired(), oraz temu, jak można go obsłużyć:

  1. W pliku konfiguracji JSON przekazywanym do zestawu SDK podczas inicjowania dodaj tylko typ wyzwania oob, jak pokazano w poniższym fragmencie kodu:

    PublicClientApplication.createNativeAuthPublicClientApplication( 
        requireContext(), 
        R.raw.native_auth_config  // JSON configuration file 
    ) 
    

    Konfiguracja native_auth_config.json zawiera następujący fragment kodu:

    {
      "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. W centrum administracyjnym Microsoft Entra skonfiguruj schemat użytkownika do używania Email z hasłem jako metody uwierzytelniania.

  3. Rozpocznij przepływ rejestracji, korzystając z metody signUp(parameters) zestawu SDK. Otrzymasz SignUpError, który przejdzie kontrolę isBrowserRequired(), ponieważ firma Microsoft Entra oczekuje hasła i typu wyzwania oob, ale skonfigurowałeś swój zestaw SDK tylko przy użyciu oob.

  4. Aby sprawdzić i obsłużyć isBrowserRequired(), użyj następującego fragmentu kodu:

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

    Kod wskazuje, że nie można ukończyć przepływu uwierzytelniania za pomocą uwierzytelniania natywnego i że przeglądarka musi być używana.

Obsłuż błąd isBrowserRequired()

Aby obsłużyć ten błąd, aplikacja kliencka musi uruchomić przeglądarkę i ponownie uruchomić przepływ uwierzytelniania. Można to zrobić przy użyciu metody acquireToken() biblioteki Microsoft Authentication Library (MSAL).

W tym celu wykonaj następujące czynności:

  1. Aby dodać adres URL przekierowania do wcześniej zarejestrowanej aplikacji, wykonaj kroki opisane w Dodawanie adresu URL przekierowania platformy.

  2. Aby zaktualizować plik konfiguracji aplikacji klienckiej, wykonaj kroki opisane w temacie [Konfigurowanie rediru

  3. ect URI w konfiguracji zestawu SDK](.. /external-id/customers/sample-mobile-app-android-kotlin-sign-in.md#configure-the-sample-android-mobile-application).

  4. Użyj następującego fragmentu kodu, aby uzyskać token przy użyciu metody 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.
        )
    } 
    

Tokeny zabezpieczające, czyli token identyfikacyjny, token dostępu i token odświeżania, uzyskane w ramach natywnego przepływu uwierzytelniania są takie same jak tokeny uzyskane za pośrednictwem przepływu delegowanego przez przeglądarkę.