驗證 Azure 裝載的 Java 應用程式

本文探討 Azure 身分識別連結庫如何針對裝載在 Azure 上的應用程式支援 Microsoft Entra 令牌驗證。 這項支援可透過本文所討論的 TokenCredential 一組實作來提供。

本文涵蓋下列主題:

如需針對與 Azure 裝載的應用程式相關的驗證問題進行疑難解答,請參閱 針對 Azure 裝載的應用程式驗證進行疑難解答。

預設 Azure 認證

DefaultAzureCredential 適用於應用程式最終在 Azure 雲端中執行的大部分案例。 DefaultAzureCredential 結合部署時常用來驗證的認證,以及用來在開發環境中驗證的認證。 DefaultAzureCredential 試著依序透過下列機制進行驗證:

DefaultAzureCredential authentication flow

  • 環境 - DefaultAzureCredential 讀取透過 環境變數 指定的帳戶資訊,並使用它進行驗證。
  • 受控識別 - 如果應用程式部署至已啟用受控識別的 Azure 主機, DefaultAzureCredential 請使用該帳戶進行驗證。
  • IntelliJ - 如果您已透過適用於 IntelliJ 的 Azure 工具組進行驗證, DefaultAzureCredential 請使用該帳戶進行驗證。
  • Visual Studio Code - 如果您已透過 Visual Studio Code Azure 帳戶外掛程式進行驗證, DefaultAzureCredential 請使用該帳戶進行驗證。
  • Azure CLI - 如果您已透過 Azure CLI az login 命令驗證帳戶, DefaultAzureCredential 請使用該帳戶進行驗證。

設定 DefaultAzureCredential

DefaultAzureCredential 透過或環境變數上的 DefaultAzureCredentialBuilder setter 支援一組組態。

  • 設定環境變數AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID ,如環境變數中所定義,會將 DefaultAzureCredential 設定為以值所指定的服務主體進行驗證。
  • 在產生器或環境變數AZURE_CLIENT_IDDefaultAzureCredential上設定.managedIdentityClientId(String)為以使用者定義受控識別進行驗證,同時讓它們保持空白,以系統指派的受控識別進行驗證。
  • 在建立器或環境變數AZURE_TENANT_IDDefaultAzureCredential上設定 .tenantId(String) ,可設定為向特定租用戶進行共用令牌快取、Visual Studio Code 和 IntelliJ IDEA 的驗證。
  • 設定環境變數 AZURE_USERNAMEDefaultAzureCredential 設定為從共用令牌快取中挑選對應的快取令牌。
  • 在建立器DefaultAzureCredential上設定.intelliJKeePassDatabasePath(String)以 IntelliJ 認證進行驗證時,設定為讀取特定的 KeePass 檔案。

使用 DefaultAzureCredential 進行驗證

下列範例示範如何使用 從 azure-security-keyvault-secrets 用戶端連結庫驗證 。SecretClientDefaultAzureCredential

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

使用 DefaultAzureCredential 驗證使用者指派的受控識別

下列範例示範如何使用部署至已設定使用者指派受控識別的 Azure 資源,從 azure-security-keyvault-secrets 用戶端連結庫DefaultAzureCredential驗證 SecretClient

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

使用 DefaultAzureCredential 在 Azure Toolkit for IntelliJ 中驗證使用者

下列範例示範如何使用 ,在安裝 IntelliJ IDEA 的工作站上,使用 DefaultAzureCredential從 azure-security-keyvault-secrets 用戶端連結庫驗證 SecretClient,且使用者已使用 Azure 帳戶登入 Azure Toolkit for IntelliJ。

如需設定 IntelliJ IDEA 的詳細資訊,請參閱 登入 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();

受控識別認證

受控識別會驗證 Azure 資源的受控識別(系統或使用者指派)。 因此,如果應用程式是在透過、IMDS端點或兩者支援受控識別IDENTITY/MSI的 Azure 資源內執行,則此認證會取得您的應用程式驗證,並提供絕佳的無秘密驗證體驗。

如需詳細資訊,請參閱 什麼是 Azure 資源的受控識別?

使用受控識別在 Azure 中驗證

下列範例示範在已啟用系統指派或使用者指派受控識別的 Azure 虛擬機、應用程式服務、函式應用程式、Cloud Shell、Service fabric、arc 或 AKS 環境中,使用 azure 上的 azure-security-keyvault-secrets 用戶端連結庫進行驗證。SecretClientManagedIdentityCredential

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

環境變數

您可以使用環境變數來設定 DefaultAzureCredentialEnvironmentCredential 。 每一種驗證類型都需要特定變數的值:

具備密碼的服務主體

變數名稱
AZURE_CLIENT_ID Microsoft Entra 應用程式的標識碼。
AZURE_TENANT_ID 應用程式的 Microsoft Entra 租使用者識別碼。
AZURE_CLIENT_SECRET 其中一個應用程式的客戶端密碼。

具有憑證的服務主體

變數名稱
AZURE_CLIENT_ID Microsoft Entra 應用程式的標識碼。
AZURE_TENANT_ID 應用程式的 Microsoft Entra 租使用者識別碼。
AZURE_CLIENT_CERTIFICATE_PATH PEM 編碼憑證檔案的路徑,包括私鑰(不含密碼保護)。

使用者名稱與密碼

變數名稱
AZURE_CLIENT_ID Microsoft Entra 應用程式的標識碼。
AZURE_USERNAME 使用者名稱(通常是電子郵件位址)。
AZURE_PASSWORD 指定使用者名稱的相關聯密碼。

此順序會嘗試設定。 例如,如果客戶端密碼和憑證的值都存在,則會使用客戶端密碼。

下一步

本文涵蓋 Azure 中裝載之應用程式的驗證。 這種形式的驗證是您可以在適用於 Java 的 Azure SDK 中驗證的多種方式之一。 下列文章說明其他方式:

如果您遇到與 Azure 裝載的應用程式驗證相關的問題,請參閱 針對 Azure 裝載的應用程式驗證進行疑難解答。

掌握驗證之後,請參閱 在 Azure SDK for Java 中設定記錄,以取得 SDK 所提供的記錄功能相關信息。