Autentisera Azure-värdbaserade Java-program

Den här artikeln beskriver hur Azure Identity-biblioteket stöder Microsoft Entra-tokenautentisering för program som finns i Azure. Det här stödet möjliggörs genom en uppsättning TokenCredential implementeringar som beskrivs i den här artikeln.

Den här artikeln beskriver följande ämnen:

Felsökning av autentiseringsproblem som rör Azure-värdbaserade program finns i Felsöka Azure-värdbaserad programautentisering.

Standardautentiseringsuppgifter för Azure

DefaultAzureCredential är lämpligt för de flesta scenarier där programmet slutligen körs i Azure Cloud. DefaultAzureCredential kombinerar autentiseringsuppgifter som ofta används för att autentisera när de distribueras, med autentiseringsuppgifter som används för att autentisera i en utvecklingsmiljö. DefaultAzureCredential försök att autentisera via följande mekanismer i ordning:

DefaultAzureCredential authentication flow

  • Miljö – DefaultAzureCredential läser kontoinformation som anges via miljövariabler och använder den för att autentisera.
  • Hanterad identitet – Om programmet distribueras till en Azure-värd med hanterad identitet aktiverad autentiserar DefaultAzureCredential med det kontot.
  • IntelliJ – Om du har autentiserat via Azure Toolkit for IntelliJ autentiserar DefaultAzureCredential du med det kontot.
  • Visual Studio Code – Om du har autentiserats via plugin-programmet DefaultAzureCredential Visual Studio Code Azure-konto autentiserar du med det kontot.
  • Azure CLI – Om du har autentiserat ett konto via Azure CLI-kommandot az loginDefaultAzureCredential autentiserar du med det kontot.

Konfigurera StandardAzureCredential

DefaultAzureCredential stöder en uppsättning konfigurationer via setters på DefaultAzureCredentialBuilder miljövariablerna eller .

  • Om du anger miljövariablerna AZURE_CLIENT_ID, AZURE_CLIENT_SECREToch AZURE_TENANT_ID enligt definitionen i Miljövariabler konfigurerasDefaultAzureCredential att autentiseras som tjänstens huvudnamn som anges av värdena.
  • Inställningen .managedIdentityClientId(String) för builder- eller miljövariabeln AZURE_CLIENT_ID konfigureras DefaultAzureCredential för att autentiseras som en användardefinierad hanterad identitet, samtidigt som de lämnas tomma konfigurerar den för att autentiseras som en systemtilldelad hanterad identitet.
  • Inställningen .tenantId(String) för builder- eller miljövariabeln AZURE_TENANT_ID konfigureras DefaultAzureCredential för att autentisera till en specifik klient för delad tokencache, Visual Studio Code och IntelliJ IDEA.
  • Om du anger miljövariabeln AZURE_USERNAME konfigureras DefaultAzureCredential att välja motsvarande cachelagrade token från cacheminnet för delad token.
  • Inställningen .intelliJKeePassDatabasePath(String) på byggaren konfigureras DefaultAzureCredential för att läsa en specifik KeePass-fil när du autentiserar med IntelliJ-autentiseringsuppgifter.

Autentisera med DefaultAzureCredential

I följande exempel visas hur du autentiserar SecretClient från klientbiblioteket azure-security-keyvault-secrets med .DefaultAzureCredential

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(new DefaultAzureCredentialBuilder().build())
  .buildClient();

Autentisera en användartilldelad hanterad identitet med DefaultAzureCredential

I följande exempel visas autentisera SecretClient från klientbiblioteket azure-security-keyvault-secrets med distribuerad DefaultAzureCredential till en Azure-resurs med en användartilldelad hanterad identitet konfigurerad.

/**
 * The default credential uses the user-assigned managed identity with the specified client ID.
 */
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .managedIdentityClientId("<managed identity client ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Autentisera en användare i Azure Toolkit for IntelliJ med DefaultAzureCredential

I följande exempel visas autentisera SecretClient från klientbiblioteket azure-security-keyvault-secrets med hjälp av DefaultAzureCredential, på en arbetsstation där IntelliJ IDEA är installerat och användaren har loggat in med ett Azure-konto till Azure Toolkit for IntelliJ.

Mer information om hur du konfigurerar din IntelliJ IDEA finns i Logga in Azure Toolkit for IntelliJ for IntelliJCredential.

/**
 * The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
 */
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Autentiseringsuppgifter för hanterad identitet

Den hanterade identiteten autentiserar den hanterade identiteten (system eller tilldelad användare) för en Azure-resurs. Så om programmet körs i en Azure-resurs som stöder hanterad identitet via IDENTITY/MSI, IMDS slutpunkter eller båda, så autentiseras ditt program med den här autentiseringsuppgiften och ger en bra hemlighetslös autentiseringsupplevelse.

Mer information finns i Vad är hanterade identiteter för Azure-resurser?

Autentisera i Azure med hanterad identitet

I följande exempel visas autentisering SecretClient från klientbiblioteket azure-security-keyvault-secrets med hjälp av ManagedIdentityCredential i en virtuell dator, apptjänst, funktionsapp, Cloud Shell, tjänstinfrastruktur, båge eller AKS-miljö i Azure, med systemtilldelad eller användartilldelad hanterad identitet aktiverad.

/**
 * Authenticate with a managed identity.
 */
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
  .clientId("<user-assigned managed identity client ID>") // required only for user-assigned
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(managedIdentityCredential)
  .buildClient();

Miljövariabler

Du kan konfigurera DefaultAzureCredential och EnvironmentCredential med miljövariabler. Varje typ av autentisering kräver värden för specifika variabler:

Tjänstens huvudnamn med hemlighet

Variabelnamn Värde
AZURE_CLIENT_ID ID för ett Microsoft Entra-program.
AZURE_TENANT_ID ID för programmets Microsoft Entra-klientorganisation.
AZURE_CLIENT_SECRET En av programmets klienthemligheter.

Tjänstens huvudnamn med certifikat

Variabelnamn Värde
AZURE_CLIENT_ID ID för ett Microsoft Entra-program.
AZURE_TENANT_ID ID för programmets Microsoft Entra-klientorganisation.
AZURE_CLIENT_CERTIFICATE_PATH Sökväg till en PEM-kodad certifikatfil inklusive privat nyckel (utan lösenordsskydd).

Användarnamn och lösenord

Variabelnamn Värde
AZURE_CLIENT_ID ID för ett Microsoft Entra-program.
AZURE_USERNAME Ett användarnamn (vanligtvis en e-postadress).
AZURE_PASSWORD Det associerade lösenordet för det angivna användarnamnet.

Konfigurationen görs i den här ordningen. Om det till exempel finns både värden för en klienthemlighet och ett certifikat används klienthemligheten.

Nästa steg

I den här artikeln beskrivs autentisering för program som finns i Azure. Den här typen av autentisering är ett av flera sätt som du kan autentisera i Azure SDK för Java. Följande artiklar beskriver andra sätt:

Om du stöter på problem som rör Azure-värdbaserad programautentisering kan du läsa Felsöka Azure-värdbaserad programautentisering.

När du har bemästrat autentiseringen kan du läsa Konfigurera loggning i Azure SDK för Java för information om de loggningsfunktioner som tillhandahålls av SDK:t.