共用方式為


適用於 JavaScript 的 Azure 身分識別用戶端連結庫中的認證鏈結

Azure 身分識別客戶端連結庫提供 認證,這些是實作 Azure Core 連結庫 TokenCredential 介面的公用類別。 認證憑證代表從 Microsoft Entra ID 取得存取令牌的不同驗證程序。 您可以個別選取這些認證或鏈結在一起,以形成要嘗試的已排序驗證機制序列。

  • 個別認證 提供速度和確定性。 如果憑證未能通過驗證,您就知道認證未成功。
  • 鏈條 提供備援。 當認證無法驗證時,會嘗試鏈結中的下一個認證。

設計驗證流程

當您使用 Azure SDK 用戶端連結庫時,第一個步驟是向 Azure 進行驗證。 有許多選項可用來進行驗證,例如開發小組中使用的工具和 IDE、測試及 CI/CD 等自動化工作流程,以及 Azure App Service 等裝載平臺。

從下列驗證流程的常見進展中選擇:

  • 針對開發人員使用各種 IDE 和 CLI 來驗證 Azure的 團隊,使用 。 這樣會提供最大的彈性。 此彈性是以效能為代價提供,以驗證鏈結中的認證,直到成功為止。

    • 根據偵測到的環境,系統會自動替您選擇不同的認證方式。
    • 若要判斷選取的認證,請開啟 偵錯
  • 針對 小組使用 ChainedTokenCredential具有嚴格且有範圍的工具選擇。 例如,他們都在相同的 IDE 或 CLI 中進行身份驗證並使用。 這讓團隊可以選擇精確的憑證及其排序,同時保持彈性,但性能成本有所降低。

    • 不論執行環境為何,您都可以從一個認證選取後援路徑到另一個認證。
    • 要判斷哪個憑證被選取,請開啟 偵錯
  • 對於在所有環境中具有認證確定性 小組,控制流程語句,例如 if/else,可讓您知道每個環境中選擇哪一個認證。

    • 沒有另一種認證方式的備援。
    • 您不需要偵錯,即可判斷已選擇哪一個認證,因為它已指定。

鏈結認證的運作方式

在運行時間,認證鏈結會嘗試使用序列的第一個認證進行驗證。 如果該認證無法取得存取令牌,則會嘗試序列中的下一個認證,依此方式,直到成功取得存取令牌為止。 下列順序圖說明此行為:

顯示 Azure 身分識別認證順序流程的圖表。

使用 DefaultAzureCredential 來提升靈活性

DefaultAzureCredential 是一種經仔細設計的、預先配置的認證鏈結。 其設計目的是支援許多環境,以及最常見的驗證流程和開發人員工具。 在圖形化形式中,基礎鏈看起來像這樣:

顯示 DefaultAzureCredential 驗證流程的圖表。

DefaultAzureCredential 嘗試認證的順序。

訂單 憑據 描述
1 環境 讀取 環境變數的集合,以判斷應用程式服務主體(應用程式使用者)是否已為應用程式設定。 如果是,DefaultAzureCredential 使用這些值向 Azure 驗證應用程式。 此方法最常用於伺服器環境,但也可以在本機開發時使用。
2 工作負載身分識別 如果應用程式部署至已啟用工作負載識別的 Azure 主機,請驗證該帳戶。
3 受控識別 如果應用程式部署至已啟用受控識別的 Azure 主機,請使用該受控識別向 Azure 驗證應用程式。
4 Azure CLI 如果開發人員使用 Azure CLI 的 az login 命令向 Azure 進行驗證,請使用相同的帳戶向 Azure 驗證應用程式。
5 Azure PowerShell 如果開發人員使用 Azure PowerShell 的 Connect-AzAccount Cmdlet 向 Azure 進行驗證,請使用相同的帳戶向 Azure 驗證應用程式。
6 Azure Developer CLI(開發者指令行介面) 如果開發人員使用 Azure Developer CLI 的 azd auth login 命令向 Azure 進行驗證,請使用該帳戶進行驗證。

最簡單的形式,您可以使用無參數版本的 DefaultAzureCredential,如下所示:

import { DefaultAzureCredential } from "@azure/identity";
import { BlobServiceClient } from "@azure/storage-blob";

// Acquire a credential object
const credential = new DefaultAzureCredential();

const blobServiceClient = new BlobServiceClient(
    "https://<my_account_name>.blob.core.windows.net",
    credential
);

憑證在環境中具有全域性

DefaultAzureCredential 會檢查特定 環境變數是否存在。 有人有可能在主電腦上的系統層級新增或修改這些環境變數。 這些變更適用於全球範圍,因此會改變任何在該電腦上執行的應用程式中,於運行時的 DefaultAzureCredential 行為。

使用 ChainedTokenCredential 來達到細緻控制

ChainedTokenCredential 是一個空的憑證鏈,您可以在其中新增憑證以滿足應用程式的需求。 例如,下列範例會新增 ManagedIdentityCredential 實例,然後新增 AzureCliCredential 實例。

import { 
    ChainedTokenCredential, 
    ManagedIdentityCredential, 
    AzureCliCredential 
} from "@azure/identity";

const credential = ChainedTokenCredential(
    ManagedIdentityCredential({ clientId: "<YOUR_CLIENT_ID>" }),
    AzureCliCredential()
);

上述程式代碼範例會建立由兩個認證組成的量身訂做認證鏈結。 首先嘗試使用者指派的受控識別變體 ManagedIdentityCredential,然後在必要時嘗試 AzureCliCredential。 在圖形化形式中,鏈條看起來像這樣:

圖表,顯示適用於受控識別和 Azure CLI 的 Azure 身分識別認證鏈結。

提示

為了提升效能,請優化您 生產環境中的憑證排列順序。 應該最後添加用於本機開發環境的憑證。

除錯連鎖憑證

若要偵錯認證鏈結,請啟用 Azure SDK 記錄

更多資源