Delen via


Problemen met Azure Identity-verificatie oplossen

In dit artikel worden technieken voor foutonderzoek beschreven, veelvoorkomende fouten voor de referentietypen in de Azure Identity Java-clientbibliotheek en oplossingsstappen om deze fouten op te lossen. Omdat er veel referentietypen beschikbaar zijn in de Azure SDK voor Java, hebben we de gids voor probleemoplossing opgesplitst in secties op basis van het gebruiksscenario. De volgende secties zijn beschikbaar:

In de rest van dit artikel worden algemene probleemoplossingstechnieken en richtlijnen beschreven die van toepassing zijn op alle referentietypen.

Azure Identity-uitzonderingen verwerken

Zoals vermeld in de uitzonderingsafhandeling in de sectie Azure SDK voor Java van het overzicht van probleemoplossing, is er een uitgebreide set uitzonderingen en foutcodes die de Azure SDK voor Java kan genereren. Voor Azure Identity zijn er een aantal belangrijke uitzonderingstypen die belangrijk zijn om te begrijpen.

ClientAuthenticationException

Elke serviceclientmethode die een aanvraag naar de service indient, kan uitzonderingen veroorzaken die voortvloeien uit verificatiefouten. Deze uitzonderingen zijn mogelijk omdat het token wordt aangevraagd vanuit de referentie bij de eerste aanroep naar de service en bij eventuele volgende aanvragen voor de service die het token moeten vernieuwen.

Als u deze fouten wilt onderscheiden van fouten in de serviceclient, geven ClientAuthenticationException Azure Identity-klassen een beschrijving van de bron van de fout in het uitzonderingsbericht en mogelijk het foutbericht. Afhankelijk van de toepassing kunnen deze fouten wel of niet worden hersteld. De volgende code toont een voorbeeld van het vangen 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 is een speciaal uitzonderingstype dat is afgeleid van ClientAuthenticationException. Dit uitzonderingstype wordt gebruikt om aan te geven dat de referentie niet kan worden geverifieerd in de huidige omgeving vanwege een gebrek aan vereiste configuratie of installatie. Deze uitzondering wordt ook gebruikt als signaal voor gekoppelde referentietypen, zoals DefaultAzureCredential en ChainedTokenCredential, dat de gekoppelde referentie later in de keten andere referentietypen moet blijven proberen.

Problemen met machtigingen

Aanroepen naar serviceclients die resulteren in HttpResponseException een StatusCode van 401 of 403 geven vaak aan dat de aanroeper niet over voldoende machtigingen beschikt voor de opgegeven API. Raadpleeg de servicedocumentatie om te bepalen welke rollen nodig zijn voor de specifieke aanvraag. Zorg ervoor dat de geverifieerde gebruiker of service-principal de juiste rollen voor de resource heeft gekregen.

Relevante informatie zoeken in uitzonderingsberichten

ClientAuthenticationException wordt gegenereerd wanneer er onverwachte fouten optreden tijdens het verifiëren van een referentie. Deze fouten kunnen fouten bevatten die zijn ontvangen van aanvragen naar de Microsoft Entra-beveiligingstokenservice (STS) en bevatten vaak informatie die nuttig is voor diagnose. Houd rekening met het volgende ClientAuthenticationException bericht:

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

Dit foutbericht bevat de volgende informatie:

  • Mislukt referentietype: het type referentie dat niet kan worden geverifieerd, ClientSecretCredentialin dit geval. Deze informatie is handig bij het diagnosticeren van problemen met gekoppelde referentietypen, zoals DefaultAzureCredential of ChainedTokenCredential.

  • STS-foutcode en -bericht: De foutcode en het bericht die zijn geretourneerd door Microsoft Entra STS. In dit geval AADSTS7000215: Invalid client secret provided. kan deze informatie inzicht geven in de specifieke reden waarom de aanvraag is mislukt. In dit specifieke geval is het opgegeven clientgeheim bijvoorbeeld onjuist. Zie de sectie AADSTS-foutcodes van Microsoft Entra-verificatie- en autorisatiefoutcodes voor meer informatie over STS-foutcodes.

  • Correlatie-id en tijdstempel: de correlatie-id en tijdstempel die worden gebruikt om de aanvraag in logboeken aan de serverzijde te identificeren. Deze informatie is handig om technici te ondersteunen bij het diagnosticeren van onverwachte STS-fouten.

Logboekregistratie inschakelen en configureren

Azure SDK voor Java biedt een consistent logboekregistratieverhaal voor hulp bij het oplossen van toepassingsfouten en om hun oplossing te versnellen. De logboeken die worden geproduceerd, leggen de stroom van een toepassing vast voordat de terminalstatus wordt bereikt om het hoofdprobleem op te sporen. Zie Logboekregistratie configureren in de Weergave Azure SDK voor Java en probleemoplossing voor hulp bij logboekregistratie.

De onderliggende MSAL-bibliotheek, MSAL4J, heeft ook gedetailleerde logboekregistratie. Deze logboekregistratie is zeer uitgebreid en bevat alle persoonlijke gegevens, inclusief tokens. Deze logboekregistratie is het handigst bij het werken met productondersteuning. Vanaf v1.10.0 hebben referenties die deze logboekregistratie bieden een methode met de naam enableUnsafeSupportLogging().

Let op

Aanvragen en antwoorden in de Azure Identity-bibliotheek bevatten gevoelige informatie. U moet voorzorgsmaatregelen nemen om logboeken te beveiligen bij het aanpassen van de uitvoer om accountbeveiliging te voorkomen.

Volgende stappen

Als de richtlijnen voor probleemoplossing in dit artikel niet helpen bij het oplossen van problemen wanneer u de Azure SDK voor Java-clientbibliotheken gebruikt, raden we u aan een probleem op te slaan in de Azure SDK voor Java GitHub-opslagplaats.