Rozwiązywanie problemów z uwierzytelnianiem tożsamości platformy Azure
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 jednostki usługi
- Rozwiązywanie problemów z uwierzytelnianiem poświadczeń użytkownika
- 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 sekcji Omówienie rozwiązywania problemów z zestawem Azure SDK dla języka Java, istnieje kompleksowy zestaw wyjątków i kodów błędów, które mogą zgłaszać zestaw 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świadczeń podczas pierwszego wywołania usługi i w przypadku wszelkich kolejnych żądań 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 tożsamości platformy Azure zgłaszają ClientAuthenticationException
szczegółowe informacje opisujące źródło błędu w komunikacie o wyjątku i prawdopodobnie 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
elementu :
// 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
CredentialUnavailableException
jest specjalnym typem wyjątku pochodzącym z ClientAuthenticationException
klasy . 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 poświadczenie łańcuchowe powinno nadal próbować innych typów poświadczeń w dalszej części łańcucha.
Problemy z uprawnieniami
Wywołania klientów usługi, w wyniku których HttpResponseException
StatusCode
element 401 lub 403 często wskazuje, że obiekt wywołujący nie ma wystarczających uprawnień dla 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ł odpowiednie role w zasobie.
Znajdowanie odpowiednich informacji w komunikatach o wyjątkach
ClientAuthenticationException
jest zgłaszany, gdy wystąpią nieoczekiwane błędy podczas uwierzytelniania poświadczeń. Te błędy mogą obejmować błędy odebrane z żądań do usługi tokenu zabezpieczającego 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 jakDefaultAzureCredential
lubChainedTokenCredential
.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 usługi AADSTS w kodach błędów uwierzytelniania i autoryzacji firmy 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 zestawie Azure SDK dla języka Java i Rozwiązywanie problemów z widokiem.
Podstawowa biblioteka MSAL, MSAL4J, ma również szczegółowe rejestrowanie. To rejestrowanie jest bardzo pełne i zawiera wszystkie dane osobowe, w tym tokeny. To rejestrowanie jest najbardziej przydatne podczas pracy z pomocą techniczną produktu. Od wersji 1.10.0 poświadczenia, które oferują to rejestrowanie, mają metodę o nazwie enableUnsafeSupportLogging()
.
Uwaga
Żą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 zgłoszenie problemuw repozytorium GitHub zestawu Azure SDK dla języka Java.