Share via


Felsöka problem med Azure Identity-autentisering

Den här artikeln beskriver metoder för felundersökning, vanliga fel för autentiseringstyperna i Azure Identity Java-klientbiblioteket och åtgärdssteg för att lösa dessa fel. Eftersom det finns många tillgängliga typer av autentiseringsuppgifter i Azure SDK för Java har vi delat upp felsökningsguiden i avsnitt baserat på användningsscenario. Följande avsnitt är tillgängliga:

Resten av den här artikeln beskriver allmänna felsökningstekniker och vägledningar som gäller för alla typer av autentiseringsuppgifter.

Hantera Azure Identity-undantag

Som du ser i avsnittet Undantagshantering i avsnittet Azure SDK för Java i felsökningsöversikten finns det en omfattande uppsättning undantag och felkoder som Azure SDK för Java kan generera. För Azure Identity specifikt finns det några viktiga undantagstyper som är viktiga att förstå.

ClientAuthenticationException

Alla tjänstklientmetoder som skickar en begäran till tjänsten kan skapa undantag som uppstår till följd av autentiseringsfel. Dessa undantag är möjliga eftersom token begärs från autentiseringsuppgiften vid det första anropet till tjänsten och på eventuella efterföljande begäranden till tjänsten som behöver uppdatera token.

För att skilja dessa fel från fel i tjänstklienten genereras ClientAuthenticationException Azure Identity-klasser med information som beskriver källan till felet i undantagsmeddelandet och eventuellt felmeddelandet. Beroende på programmet kanske dessa fel kan återställas eller inte. Följande kod visar ett exempel på att fånga 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

CredentialUnavailableException är en särskild undantagstyp som härleds från ClientAuthenticationException. Den här undantagstypen används för att indikera att autentiseringsuppgifterna inte kan autentiseras i den aktuella miljön på grund av brist på nödvändig konfiguration eller konfiguration. Det här undantaget används också som en signal till länkade typer av autentiseringsuppgifter, till exempel DefaultAzureCredential och ChainedTokenCredential, att de länkade autentiseringsuppgifterna ska fortsätta att prova andra typer av autentiseringsuppgifter senare i kedjan.

Behörighetsproblem

Anrop till tjänstklienter som StatusCode resulterar i HttpResponseException 401 eller 403 indikerar ofta att anroparen inte har tillräcklig behörighet för det angivna API:et. Kontrollera tjänstdokumentationen för att avgöra vilka roller som behövs för den specifika begäran. Kontrollera att den autentiserade användaren eller tjänstens huvudnamn har beviljats lämpliga roller för resursen.

Hitta relevant information i undantagsmeddelanden

ClientAuthenticationException utlöses när oväntade fel inträffar när en autentiseringsuppgift autentiseras. Dessa fel kan omfatta fel som tas emot från begäranden till Microsoft Entra-tjänsten för säkerhetstoken (STS) och innehåller ofta information som är användbar för diagnostik. Överväg följande ClientAuthenticationException meddelande:

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

Det här felmeddelandet innehåller följande information:

  • Misslyckad typ av autentiseringsuppgifter: Den typ av autentiseringsuppgifter som inte kunde autentiseras – i det här fallet ClientSecretCredential. Den här informationen är användbar när du diagnostiserar problem med länkade typer av autentiseringsuppgifter, till exempel DefaultAzureCredential eller ChainedTokenCredential.

  • STS-felkod och -meddelande: Felkoden och meddelandet som returnerades från Microsoft Entra STS – i det här fallet AADSTS7000215: Invalid client secret provided. kan den här informationen ge insikt i den specifika orsaken till att begäran misslyckades. Till exempel, i det här specifika fallet, eftersom den angivna klienthemligheten är felaktig. Mer information om STS-felkoder finns i avsnittet AADSTS-felkoder i Felkoder för Microsoft Entra-autentisering och auktorisering.

  • Korrelations-ID och tidsstämpel: Korrelations-ID och tidsstämpel för anrop som används för att identifiera begäran i loggar på serversidan. Den här informationen är användbar för tekniker när du diagnostiserar oväntade STS-fel.

Aktivera och konfigurera loggning

Azure SDK för Java erbjuder en konsekvent loggningshistoria som hjälper dig att felsöka programfel och för att påskynda lösningen. Loggarna skapade avbildningsflödet för ett program innan det nådde terminaltillståndet för att hitta rotproblemet. Vägledning om loggning finns i Konfigurera loggning i Azure SDK för Java och Felsökning över vyn.

Det underliggande MSAL-biblioteket, MSAL4J, har också detaljerad loggning. Den här loggningen är mycket utförlig och innehåller alla personliga data, inklusive token. Den här loggningen är mest användbar när du arbetar med produktsupport. Från och med v1.10.0 har autentiseringsuppgifter som erbjuder den här loggningen en metod som heter enableUnsafeSupportLogging().

Varning

Begäranden och svar i Azure Identity-biblioteket innehåller känslig information. Du måste vidta försiktighetsåtgärder för att skydda loggar när du anpassar utdata för att undvika att äventyra kontosäkerheten.

Nästa steg

Om felsökningsguiden i den här artikeln inte hjälper till att lösa problem när du använder Azure SDK för Java-klientbibliotek rekommenderar vi att du skapar ett problem i Azure SDK för Java GitHub-lagringsplatsen.