Udostępnij za pośrednictwem


Samouczek: obsługa rezerwowego w internecie w aplikacji dla systemu Android

W tym samouczku pokazano, jak isBrowserRequired() występuje błąd i jak można go rozwiązać. Metoda isBrowserRequired() narzędzia 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.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Sprawdzić isBrowserRequired()
  • Uchwyt isBrowserRequired()

Wymagania wstępne

Powrót do sieci Web

Użyj mechanizmu rezerwowego sieci Web 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 zainicjujesz zestaw SDK przy użyciu typu wyzwania oob , ale w centrum administracyjnym firmy Microsoft Entra skonfigurujesz aplikację przy użyciu poczty e-mail z metodą uwierzytelniania haseł.

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

Przykładowy przepływ

Przyjrzyjmy się przykładowej przepływowi, który zwraca isBrowserRequired()wartość i 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 ma 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 firmy Microsoft Entra skonfiguruj przepływ użytkownika, aby używał poczty e-mail z hasłem jako metody uwierzytelniania.

  3. Uruchom przepływ rejestracji przy użyciu metody zestawu SDK signUp(username) . Otrzymasz element SignUpError isBrowserRequired() , który przejdzie sprawdzanie, ponieważ firma Microsoft Entra oczekuje hasła i typu wyzwania oob , ale zestaw SDK został skonfigurowany tylko przy użyciu obiektu oob.

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

    val actionResult = authClient.signUp( 
        username = email 
    ) 
    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.

Błąd handle 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 biblioteki Microsoft Authentication Library (MSAL). acquireToken()

Aby to zrobić, wykonaj następujące kroki:

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

  2. Aby zaktualizować plik konfiguracji aplikacji klienckiej, wykonaj kroki opisane w temacie Konfigurowanie identyfikatora URI przekierowania w konfiguracji zestawu SDK.

  3. Użyj następującego fragmentu kodu, aby uzyskać token przy użyciu acquireToken() metody :

    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.
        )
    } 
    

Tokeny zabezpieczające, token identyfikatora, token dostępu i token odświeżania. Przepływ uwierzytelniania natywnego jest taki sam jak token uzyskiwany za pośrednictwem przepływu delegowanego przez przeglądarkę.