Authentifizieren von in Azure gehosteten Java-Anwendungen

In diesem Artikel wird erläutert, wie die Azure Identity-Bibliothek die Microsoft Entra-Tokenauthentifizierung für Anwendungen unterstützt, die in Azure gehostet werden. Diese Unterstützung wird durch eine Reihe von TokenCredential Implementierungen ermöglicht, die in diesem Artikel erläutert werden.

In diesem Artikel werden die folgenden Themen behandelt:

Informationen zur Problembehandlung von Authentifizierungsproblemen im Zusammenhang mit von Azure gehosteten Anwendungen finden Sie unter "Problembehandlung bei der azure-gehosteten Anwendungsauthentifizierung".

Azure-Standardanmeldeinformationen

DefaultAzureCredential eignet sich für die meisten Szenarien, in denen die Anwendung letztendlich in der Azure Cloud ausgeführt wird. DefaultAzureCredential kombiniert Anmeldeinformationen, die bei der Bereitstellung häufig zum Authentifizieren verwendet werden, mit Anmeldeinformationen, die für die Authentifizierung in einer Entwicklungsumgebung verwendet werden. DefaultAzureCredential versucht, sich über die folgenden Mechanismen zu authentifizieren:

DefaultAzureCredential authentication flow

  • Umgebung – DefaultAzureCredential liest Kontoinformationen, die über Umgebungsvariablen angegeben wurden, und verwendet sie zur Authentifizierung.
  • Verwaltete Identität – Wenn die Anwendung auf einem Azure-Host mit aktivierter verwalteter Identität bereitgestellt wird, DefaultAzureCredential authentifiziert sie sich mit diesem Konto.
  • IntelliJ – Wenn Sie sich über das Azure Toolkit für IntelliJ authentifiziert haben, DefaultAzureCredential authentifiziert sie sich mit diesem Konto.
  • Visual Studio Code – Wenn Sie sich über das Visual Studio Code Azure-Konto-Plug-In authentifiziert haben, DefaultAzureCredential authentifiziert sich das Konto.
  • Azure CLI – Wenn Sie ein Konto über den Azure CLI-Befehl az login authentifiziert haben, DefaultAzureCredential authentifiziert sie sich mit diesem Konto.

Konfigurieren von DefaultAzureCredential

DefaultAzureCredential unterstützt eine Reihe von Konfigurationen durch Setter für DefaultAzureCredentialBuilder oder Umgebungsvariablen.

  • Durch Festlegen der Umgebungsvariablen AZURE_CLIENT_IDAZURE_CLIENT_SECRETund AZURE_TENANT_ID gemäß der Definition in Umgebungsvariablen wird DefaultAzureCredential die Authentifizierung als dienstprinzipal konfiguriert, der durch die Werte angegeben wird.
  • Die Einstellung .managedIdentityClientId(String) für den Generator oder die Umgebungsvariable AZURE_CLIENT_IDDefaultAzureCredential konfiguriert die Authentifizierung als benutzerdefinierte verwaltete Identität, während sie leer bleibt, wird sie so konfiguriert, dass sie als vom System zugewiesene verwaltete Identität authentifiziert wird.
  • Die Einstellung .tenantId(String) für den Generator oder die Umgebungsvariable AZURE_TENANT_ID konfiguriert die Authentifizierung bei einem bestimmten Mandanten für den freigegebenen DefaultAzureCredential Tokencache, Visual Studio Code und IntelliJ IDEA.
  • Durch Festlegen der Umgebungsvariable AZURE_USERNAME wird DefaultAzureCredential konfiguriert, dass das entsprechende zwischengespeicherte Token aus dem freigegebenen Tokencache ausgewählt wird.
  • Die Einstellung .intelliJKeePassDatabasePath(String) für den Generator konfiguriert DefaultAzureCredential das Lesen einer bestimmten KeePass-Datei beim Authentifizieren mit IntelliJ-Anmeldeinformationen.

Authentifizieren mit DefaultAzureCredential

Im folgenden Beispiel wird die SecretClient Authentifizierung aus der clientbibliothek mit azure-security-keyvault-secrets veranschaulichtDefaultAzureCredential.

// 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();

Authentifizieren einer benutzerseitig zugewiesenen verwalteten Identität mit DefaultAzureCredential

Das folgende Beispiel veranschaulicht die SecretClient Authentifizierung der clientbibliothek mit azure-security-keyvault-secrets mithilfe DefaultAzureCredential der Bereitstellung in einer Azure-Ressource mit einer vom Benutzer zugewiesenen verwalteten Identität.

/**
 * 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();

Authentifizieren eines Benutzers in Azure-Toolkit für IntelliJ mit DefaultAzureCredential

Im folgenden Beispiel wird die Authentifizierung SecretClient aus der clientbibliothek mit azure-security-keyvault-secrets veranschaulichtDefaultAzureCredential, auf einer Arbeitsstation, auf der IntelliJ IDEA installiert ist, und der Benutzer hat sich mit einem Azure-Konto beim Azure Toolkit für IntelliJ angemeldet.

Weitere Informationen zum Konfigurieren von IntelliJ IDEA finden Sie unter Anmelden beim Azure-Toolkit für IntelliJ für 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();

Anmeldeinformationen für verwaltete Identität

Die verwaltete Identität authentifiziert die verwaltete Identität (system- oder benutzerseitig zugewiesen) einer Azure-Ressource. Wenn die Anwendung also in einer Azure-Ressource ausgeführt wird, die verwaltete Identität über IDENTITY/MSIEndpunkte IMDS oder beides unterstützt, erhält diese Anmeldeinformationen Ihre Anwendung authentifiziert und bietet eine großartige, geheime Authentifizierung.

Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.

Authentifizierung in Azure mit verwalteter Identität

Das folgende Beispiel zeigt die Authentifizierung von SecretClient aus der azure-security-keyvault-secrets-Clieentbibliothek mit ManagedIdentityCredential mit einem virtuellen Computer, einem App-Dienst, einer Funktions-App, mit Cloud Shell oder einer Service Fabric, arc- oder AKS-Umgebung in Azure, wobei die system- oder benutzerseitig zugewiesene verwaltete Identität aktiviert ist.

/**
 * 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();

Umgebungsvariablen

Sie können DefaultAzureCredential und EnvironmentCredential mit Umgebungsvariablen konfigurieren. Jeder Authentifizierungstyp erfordert Werte für bestimmte Variablen:

Dienstprinzipal mit Geheimnis

Variablenname Wert
AZURE_CLIENT_ID ID einer Microsoft Entra-Anwendung.
AZURE_TENANT_ID ID des Microsoft Entra-Mandanten der Anwendung.
AZURE_CLIENT_SECRET Eines der Clientgeheimnisse der Anwendung.

Dienstprinzipal mit Zertifikat

Variablenname Wert
AZURE_CLIENT_ID ID einer Microsoft Entra-Anwendung.
AZURE_TENANT_ID ID des Microsoft Entra-Mandanten der Anwendung.
AZURE_CLIENT_CERTIFICATE_PATH Pfad zu einer PEM-codierten Zertifikatdatei einschließlich privatem Schlüssel (ohne Kennwortschutz).

Benutzername und Kennwort

Variablenname Wert
AZURE_CLIENT_ID ID einer Microsoft Entra-Anwendung.
AZURE_USERNAME Einen Benutzername (normalerweise eine E-Mail-Adresse).
AZURE_PASSWORD Das zugehörige Kennwort für den angegebenen Benutzernamen.

Die Konfiguration wird in dieser Reihenfolge versucht. Wenn zum Beispiel sowohl Werte für ein Clientgeheimnis als auch für ein Zertifikat vorhanden sind, wird das Clientgeheimnis verwendet.

Nächste Schritte

In diesem Artikel wurde Authentifizierung für in Azure gehostete Anwendungen behandelt. Diese Form von Authentifizierung ist eine von mehreren Methoden, die Sie im Azure SDK für Java für die Authentifizierung verwenden können. In den folgenden Artikeln werden weitere Möglichkeiten beschrieben:

Wenn Probleme im Zusammenhang mit der azure-gehosteten Anwendungsauthentifizierung auftreten, lesen Sie die Problembehandlung bei der azure-gehosteten Anwendungsauthentifizierung.

Wenn Sie die Authentifizierung gemeistert haben, finden Sie unter Konfigurieren der Protokollierung im Azure SDK für Java weitere Informationen zur Protokollierungsfunktionalität, die vom SDK bereitgestellt wird.