Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano techniki badania błędów, typowe błędy typów poświadczeń w bibliotece klienta Java tożsamości platformy Azure oraz kroki ograniczania ryzyka w celu rozwiązania tych błędów. Ponieważ w zestawie Azure SDK dla języka Java jest dostępnych wiele typów poświadczeń, podzieliliśmy przewodnik rozwiązywania problemów na sekcje oparte na scenariuszu użycia. Dostępne są następujące sekcje:
- Rozwiązywanie problemów z uwierzytelnianiem aplikacji hostowanych na platformie Azure
- Rozwiązywanie problemów z uwierzytelnianiem środowiska deweloperskiego
- Rozwiązywanie problemów z uwierzytelnianiem głównej usługi
- Rozwiązywanie problemów z uwierzytelnianiem wielodostępnym
W pozostałej części tego artykułu omówiono ogólne techniki rozwiązywania problemów i wskazówki dotyczące wszystkich typów poświadczeń.
Obsługa wyjątków tożsamości platformy Azure
Jak wspomniano w sekcji Obsługa wyjątków w Azure SDK dla języka Java w Omówienie rozwiązywania problemów, istnieje kompleksowy zestaw wyjątków i kodów błędów, które może generować Azure SDK dla języka Java. W przypadku tożsamości platformy Azure istnieje kilka kluczowych typów wyjątków, które są ważne do zrozumienia.
ClientAuthenticationException
Każda metoda klienta usługi, która wysyła żądanie do usługi, może zgłaszać wyjątki wynikające z błędów uwierzytelniania. Te wyjątki są możliwe, ponieważ token jest żądany z poświadczenia przy pierwszym wywołaniu usługi i przy wszelkich kolejnych żądaniach do usługi, które muszą odświeżyć token.
Aby odróżnić te błędy od błędów w kliencie usługi, klasy Azure Identity zgłaszają ClientAuthenticationException z szczegółowymi informacjami opisującymi źródło błędu w komunikacie o wyjątku i ewentualnie zawierającymi komunikat o błędzie. W zależności od aplikacji te błędy mogą lub nie mogą być możliwe do odzyskania. Poniższy kod przedstawia przykład przechwytywania ClientAuthenticationException:
// Create a secret client using the DefaultAzureCredential
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://myvault.vault.azure.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
try {
KeyVaultSecret secret = client.getSecret("secret1");
} catch (ClientAuthenticationException e) {
//Handle Exception
e.printStackTrace();
}
CredentialUnavailableException (Brak dostępnych danych uwierzytelniających)
CredentialUnavailableException jest szczególnym typem wyjątku pochodzącym z klasy ClientAuthenticationException. Ten typ wyjątku służy do wskazywania, że poświadczenie nie może uwierzytelniać się w bieżącym środowisku z powodu braku wymaganej konfiguracji lub konfiguracji. Ten wyjątek jest również używany jako sygnał do łańcuchowych typów poświadczeń, takich jak DefaultAzureCredential i ChainedTokenCredential, że łańcuchowe poświadczenie powinno nadal próbować innych typów poświadczeń w kolejnych etapach łańcucha.
Problemy z uprawnieniami
Wywołania klientów usługi, które skutkują HttpResponseExceptionStatusCode 401 lub 403, często wskazują, że wywołujący nie ma wystarczających uprawnień do określonego interfejsu API. Zapoznaj się z dokumentacją usługi, aby określić, które role są potrzebne dla określonego żądania. Upewnij się, że uwierzytelniony użytkownik lub jednostka usługi otrzymała odpowiednie role w zasobie.
Znajdowanie odpowiednich informacji w komunikatach o wyjątkach
ClientAuthenticationException zostaje zgłoszony, gdy wystąpią nieoczekiwane błędy podczas uwierzytelniania kredencjałów. Tego rodzaju błędy mogą obejmować błędy pojawiające się w wyniku żądań do usługi tokenów zabezpieczających firmy Microsoft (STS) i często zawierają informacje pomocne w diagnostyce. Rozważmy następujący ClientAuthenticationException komunikat:
ClientSecretCredential authentication failed: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details.
Original exception:
AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.
Trace ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Correlation ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Timestamp: 2022-01-01 00:00:00Z
Ten komunikat o błędzie zawiera następujące informacje:
Typ poświadczeń zakończony niepowodzeniem: typ poświadczenia, którego nie można uwierzytelnić — w tym przypadku
ClientSecretCredential. Te informacje są przydatne podczas diagnozowania problemów z typami poświadczeń łańcuchowych, takimi jakDefaultAzureCredentiallubChainedTokenCredential.Kod błędu usługi STS i komunikat: kod błędu i komunikat zwrócony z usługi Microsoft Entra STS — w tym przypadku
AADSTS7000215: Invalid client secret provided.te informacje mogą dać wgląd w konkretny powód, dla którego żądanie nie powiodło się. Na przykład w tym konkretnym przypadku, ponieważ podany klucz tajny klienta jest niepoprawny. Aby uzyskać więcej informacji na temat kodów błędów STS, zobacz sekcję kody błędów AADSTS w kodach błędów uwierzytelniania i autoryzacji Microsoft Entra.Identyfikator korelacji i sygnatura czasowa: identyfikator korelacji i sygnatura czasowa wywołania używana do identyfikowania żądania w dziennikach po stronie serwera. Te informacje są przydatne dla inżynierów pomocy technicznej podczas diagnozowania nieoczekiwanych awarii usługi STS.
Włączanie i konfigurowanie rejestrowania
Zestaw Azure SDK dla języka Java oferuje spójny scenariusz rejestrowania, który pomaga w rozwiązywaniu problemów z błędami aplikacji i pomaga przyspieszyć ich rozwiązywanie. Dzienniki utworzone przechwytują przepływ aplikacji przed dotarciem do stanu terminalu, aby ułatwić zlokalizowanie głównego problemu. Aby uzyskać wskazówki dotyczące rejestrowania, zobacz Konfigurowanie rejestrowania w Azure SDK dla Javy i Przegląd rozwiązywania problemów.
Podstawowa biblioteka MSAL, czyli MSAL4J, ma również szczegółowe rejestrowanie. To rejestrowanie jest bardzo szczegółowe i zawiera wszystkie dane osobowe, w tym tokeny. Rejestrowanie jest najbardziej użyteczne podczas pracy z wsparciem technicznym produktu. Od wersji 1.10.0 poświadczenia, które oferują to rejestrowanie, mają metodę o nazwie enableUnsafeSupportLogging().
Ostrożność
Żądania i odpowiedzi w bibliotece tożsamości platformy Azure zawierają informacje poufne. Należy podjąć środki ostrożności, aby chronić dzienniki podczas dostosowywania danych wyjściowych, aby uniknąć naruszenia zabezpieczeń konta.
Następne kroki
Jeśli wskazówki dotyczące rozwiązywania problemów w tym artykule nie pomogą rozwiązać problemów podczas korzystania z bibliotek klienckich zestawu Azure SDK dla języka Java, zalecamy, aby zgłosić problem w repozytorium Azure SDK for Java w usłudze GitHub.