Wyjątki w bibliotece MSAL dla języka Java

Podczas przetwarzania wyjątków można użyć samego typu wyjątku i składowej ErrorCode, aby rozróżniać wyjątki. Istnieją trzy typy wyjątków: MsalClientException, MsalServiceException i MsalInteractionRequiredException, z których wszystkie dziedziczą po MsalException.

  • Błąd MsalClientException jest zgłaszany, gdy wystąpi błąd lokalny dla biblioteki lub urządzenia.
  • Wyjątek MsalServiceException jest zgłaszany, gdy usługa STS zwraca odpowiedź o błędzie lub wystąpi inny błąd sieci.
  • Błąd MsalInteractionRequiredException jest zgłaszany, gdy interakcja interfejsu użytkownika jest wymagana do pomyślnego uwierzytelnienia.

MsalServiceException

MsalServiceException uwidacznia nagłówki HTTP, które zwróciły żądania do usługi STS. Dostęp do nich można uzyskać za pomocą MsalServiceException.headers()

MsalInteractionRequiredException

Jeden z typowych kodów stanu zwracanych z biblioteki MSAL4J podczas wywoływania AcquireTokenSilently() to InvalidGrantError. Ten kod stanu oznacza, że aplikacja powinna ponownie wywołać bibliotekę uwierzytelniania, ale w trybie interaktywnym (Używanie parametrów AuthorizationCodeParameters lub DeviceCodeParameters dla publicznych aplikacji klienckich). Jest to spowodowane tym, że wymagana jest dodatkowa interakcja użytkownika przed wystawieniem tokenu uwierzytelniania.

W większości przypadków niepowodzenia metody AcquireTokenSilently jest to spowodowane tym, że pamięć podręczna tokenów nie ma tokenów pasujących do żądania. Tokeny dostępu wygasają po 1 godzinie, a metoda AcquireTokenSilently spróbuje pobrać nowy token przy użyciu tokenu odświeżania (w terminologii OAuth2 jest to przepływ „Refresh Token”). Ten przepływ może również zakończyć się niepowodzeniem z różnych powodów, na przykład jeśli administrator dzierżawy konfiguruje bardziej rygorystyczne zasady logowania.

Interakcja ma na celu umożliwienie użytkownikowi wykonania akcji. Niektóre z tych warunków można łatwo rozwiązać (na przykład zaakceptować warunki użytkowania jednym kliknięciem), a niektóre z nich nie mogą zostać rozwiązane przy użyciu bieżącej konfiguracji (na przykład maszyna, o których mowa, musi nawiązać połączenie z określoną siecią firmową).

Biblioteka MSAL udostępnia pole reason, które można odczytać, aby zapewnić lepsze wrażenia użytkownika, na przykład aby poinformować użytkownika, że jego hasło wygasło lub że będzie musiał udzielić zgody na korzystanie z niektórych zasobów. Obsługiwane wartości należą do wyliczenia InteractionRequiredExceptionReason:

Powód Meaning Zalecane postępowanie
Akcja podstawowa Warunek można rozwiązać przez interakcję użytkownika podczas przepływu uwierzytelniania interakcyjnego Wywołaj metodę acquireToken, przekazując parametry interaktywne
Dodatkowa akcja Warunek można rozwiązać przez dodatkową interakcję korygacyjną z systemem poza przepływem uwierzytelniania interakcyjnego. Wywołaj metodę acquireToken za pomocą parametrów interaktywnych, aby wyświetlić komunikat, który wyjaśnia akcję korygowania. Aplikacja wywołująca może zdecydować o ukryciu przepływów wymagających dodatkowego działania, jeśli jest mało prawdopodobne, że użytkownik wykona działanie naprawcze.
Tylko komunikat Obecnie nie można rozwiązać tego warunku. Uruchomienie przepływu uwierzytelniania interakcyjnego spowoduje wyświetlenie komunikatu objaśniającego warunek. Wywołaj metodę acquireToken z parametrami interaktywnymi, aby wyświetlić komunikat, który wyjaśnia warunek. Metoda acquireTokenCall zwróci błąd UserCanceled, gdy użytkownik przeczyta komunikat i zamknie okno. Aplikacja wywołująca może zdecydować o ukryciu przepływów, które kończą się wynikiem `message_only`, jeśli użytkownik prawdopodobnie nie odniesie korzyści z komunikatu.
Wymagana zgoda Brak zgody użytkownika lub została odwołana. Wszystkie wywołania metody acquireToken wykonuj z parametrami interaktywnymi, aby umożliwić użytkownikowi wyrażenie zgody.
Hasło użytkownika wygasło Hasło użytkownika wygasło. Wywołaj metodę acquireToken za pomocą parametru interaktywnego, aby użytkownik mógł zresetować hasło
Wymagana zgoda Brak zgody użytkownika lub została odwołana Wywołaj metodę acquireToken z parametrami interaktywnymi, aby użytkownik mógł zresetować hasło
Żadne Nie podano żadnych dalszych szczegółów. Warunek może zostać rozwiązany przez interakcję użytkownika podczas przepływu uwierzytelniania interakcyjnego. Wywołaj metodę acquireToken z parametrami interaktywnymi

Przykład kodu

IAuthenticationResult result;
try {
    PublicClientApplication application = PublicClientApplication
            .builder("clientId")
            .b2cAuthority("authority")
            .build();

    SilentParameters parameters = SilentParameters
            .builder(Collections.singleton("scope"))
            .build();

    result = application.acquireTokenSilently(parameters).join();
}
catch (Exception ex){
    if(ex instanceof MsalInteractionRequiredException){
        // AcquireToken by either AuthorizationCodeParameters or DeviceCodeParameters
    } else{
        // Log and handle exception accordingly
    }
}