驗證 Azure 裝載的 Java 應用程式
本文探討 Azure 身分識別連結庫如何針對裝載於 Azure 上的應用程式支援Microsoft Entra 令牌驗證。 這項支援可透過本文所討論的 TokenCredential
一組實作來提供。
本文涵蓋下列主題:
如需針對與 Azure 裝載的應用程式相關的驗證問題進行疑難解答,請參閱 針對 Azure 裝載的應用程式驗證進行疑難解答。
預設 Azure 認證
DefaultAzureCredential
適用於應用程式最終在 Azure 雲端中執行的大部分案例。 DefaultAzureCredential
結合部署時常用來驗證的認證,以及用來在開發環境中驗證的認證。 DefaultAzureCredential
試著依序透過下列機制進行驗證:
- 環境 -
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_ID
、AZURE_CLIENT_SECRET
和AZURE_TENANT_ID
,如環境變數中所定義,會將DefaultAzureCredential
設定為以值所指定的服務主體進行驗證。 - 在產生器或環境變數
AZURE_CLIENT_ID
DefaultAzureCredential
上設定.managedIdentityClientId(String)
為以使用者定義受控識別進行驗證,同時讓它們保持空白,以系統指派的受控識別進行驗證。 - 在建立器或環境變數
AZURE_TENANT_ID
DefaultAzureCredential
上設定.tenantId(String)
,可設定為向特定租用戶進行共用令牌快取、Visual Studio Code 和 IntelliJ IDEA 的驗證。 - 設定環境變數
AZURE_USERNAME
會DefaultAzureCredential
設定為從共用令牌快取中挑選對應的快取令牌。 - 在建立器
DefaultAzureCredential
上設定.intelliJKeePassDatabasePath(String)
以 IntelliJ 認證進行驗證時,設定為讀取特定的 KeePass 檔案。
使用 DefaultAzureCredential 進行驗證
下列範例示範如何使用 從 azure-security-keyvault-secrets 用戶端連結庫驗證 。SecretClient
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();
使用 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 用戶端連結庫進行驗證。SecretClient
ManagedIdentityCredential
/**
* 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();
環境變數
您可以使用環境變數來設定 DefaultAzureCredential
和 EnvironmentCredential
。 每一種驗證類型都需要特定變數的值:
具備密碼的服務主體
變數名稱 | 值 |
---|---|
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 所提供的記錄功能相關信息。