Sdílet prostřednictvím


Řešení problémů s ověřováním Azure Identity

Tento článek se zabývá technikami šetření selhání, běžnými chybami typů přihlašovacích údajů v klientské knihovně Azure Identity Java a kroky pro zmírnění těchto chyb. Vzhledem k tomu, že v sadě Azure SDK pro Javu je k dispozici mnoho typů přihlašovacích údajů, rozdělili jsme průvodce odstraňováním potíží do oddílů na základě scénáře použití. K dispozici jsou následující části:

Zbývající část tohoto článku popisuje obecné techniky řešení potíží a pokyny, které platí pro všechny typy přihlašovacích údajů.

Zpracování výjimek identit Azure

Jak je uvedeno v části Řešení potíží v části Zpracování výjimek v sadě Azure SDK pro Javu, existuje komplexní sada výjimek a kódů chyb, které může vyvolat sada Azure SDK pro Javu. Konkrétně pro Azure Identity existuje několik klíčových typů výjimek, které je důležité pochopit.

ClientAuthenticationException

Jakákoli metoda klienta služby, která odešle požadavek na službu, může vyvolat výjimky vyplývající z chyb ověřování. Tyto výjimky jsou možné, protože token se vyžaduje z přihlašovacích údajů při prvním volání služby a na všechny následné požadavky na službu, které potřebují token aktualizovat.

Aby se tato selhání odlišily od selhání v klientovi služby, třídy identit Azure vyvolávají ClientAuthenticationException podrobnosti popisující zdroj chyby ve zprávě o výjimce a případně chybovou zprávu. V závislosti na aplikaci můžou nebo nemusí být tyto chyby obnovitelné. Následující kód ukazuje příklad zachycení 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();
}

Výjimka při nedostupných přihlašovacích údajích

CredentialUnavailableException je zvláštní typ výjimky odvozený z ClientAuthenticationException. Tento typ výjimky se používá k označení, že přihlašovací údaje nelze ověřit v aktuálním prostředí kvůli nedostatku požadované konfigurace nebo nastavení. Tato výjimka se také používá jako signál ke zřetězeným typům přihlašovacích údajů, jako DefaultAzureCredential je například a ChainedTokenCredential, že zřetězený přihlašovací údaje by měly pokračovat v pokusu o další typy přihlašovacích údajů později v řetězu.

Problémy s oprávněními

Volání klientů služeb, jejichž HttpResponseException výsledkem je StatusCode 401 nebo 403, často značí, že volající nemá dostatečná oprávnění pro zadané rozhraní API. Projděte si dokumentaci ke službě a zjistěte, které role jsou potřeba pro konkrétní požadavek. Ujistěte se, že ověřenému uživateli nebo instančnímu objektu byly uděleny příslušné role prostředku.

Vyhledání relevantních informací ve zprávách o výjimce

ClientAuthenticationException je vyvolán, když dojde k neočekávaným chybám při ověřování přihlašovacích údajů. Mezi tyto chyby můžou patřit chyby přijaté z požadavků na službu tokenů zabezpečení Microsoft Entra (STS) a často obsahují informace užitečné pro diagnostiku. Představte si následující ClientAuthenticationException zprávu:

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

Tato chybová zpráva obsahuje následující informace:

  • Typ neúspěšných přihlašovacích údajů: Typ přihlašovacích údajů, které se nepodařilo ověřit – v tomto případě ClientSecretCredential. Tyto informace jsou užitečné při diagnostice problémů s zřetězenými typy přihlašovacích údajů, například DefaultAzureCredential ChainedTokenCredential.

  • Kód chyby služby STS a zpráva: Kód chyby a zpráva vrácená ze služby Microsoft Entra STS – v tomto případě AADSTS7000215: Invalid client secret provided. můžou tyto informace poskytnout přehled o konkrétním důvodu, proč požadavek selhal. Například v tomto konkrétním případě, protože zadaný tajný klíč klienta je nesprávný. Další informace o kódech chyb služby STS najdete v části Kódy chyb AADSTS v kódech chyb ověřování a autorizace microsoft Entra.

  • ID korelace a časové razítko: ID korelace a časové razítko volání používané k identifikaci požadavku v protokolech na straně serveru. Tyto informace jsou užitečné pro podporu techniků při diagnostice neočekávaných selhání služby STS.

Povolení a konfigurace protokolování

Sada Azure SDK pro Javu nabízí konzistentní scénář protokolování, který pomáhá řešit chyby aplikací a urychlit jejich řešení. Protokoly vytvořené zachytí tok aplikace před dosažením stavu terminálu, aby pomohly najít kořenový problém. Pokyny k protokolování najdete v tématu Konfigurace protokolování v sadě Azure SDK pro Javu a řešení potíží v zobrazení.

Základní knihovna MSAL, MSAL4J, má také podrobné protokolování. Toto protokolování je velmi podrobné a zahrnuje všechna osobní data včetně tokenů. Toto protokolování je nejužitečnější při práci s podporou produktů. Od verze 1.10.0 mají přihlašovací údaje, které nabízejí toto protokolování, metodu s názvem enableUnsafeSupportLogging().

Upozornění

Žádosti a odpovědi v knihovně identit Azure obsahují citlivé informace. Při přizpůsobení výstupu je nutné provést preventivní opatření k ochraně protokolů, abyste zabránili narušení zabezpečení účtu.

Další kroky

Pokud pokyny k řešení potíží v tomto článku nepomáhají vyřešit problémy při použití sady Azure SDK pro klientské knihovny Java, doporučujeme vám založit problém v úložišti Azure SDK pro Javu na GitHubu.