JavaScript 用 Azure ID クライアント ライブラリ内の資格情報チェーン
Azure Identity クライアント ライブラリには、Azure Core ライブラリの TokenCredential インターフェイスを実装するパブリック クラスである 資格情報 が用意されています。 資格情報は、Microsoft Entra ID からアクセス トークンを取得するための個別の認証フローを表します。 これらの資格情報は、個別に選択することも、一緒に連結して、試行する順序付けられた一連の認証メカニズムを形成することもできます。
- 個々の資格情報 速度と確実性を提供します。 失敗した場合は、資格情報が認証されなかったことがわかります。
- チェーン は代替策を提供します。 資格情報の認証に失敗すると、チェーン内の次の資格情報が試行されます。
認証フローを設計する
Azure SDK クライアント ライブラリを使用する場合、最初の手順は Azure に対する認証です。 開発チームで使用されるツールや IDE、テストや CI/CD などの自動化ワークフロー、Azure App Service などのホスティング プラットフォームなど、考慮すべき認証方法には多くのオプションがあります。
認証フローの次の一般的な進行状況から選択します。
開発者がさまざまな IDE と CLI を使用して Azureに対する認証を行う
チームには、この を使用します。 これにより、最大の柔軟性が得ることができます。 この柔軟性は、成功するまでチェーン内の資格情報を検証するためのパフォーマンスを犠牲にして提供されます。 ChainedTokenCredential
は、厳密で限定された範囲のツールを持つチームに使用します。 たとえば、これらはすべて同じ IDE または CLI で認証され、使用されます。 これにより、チームは正確な資格情報と順序を選択でき、柔軟性は引き続き提供されますが、パフォーマンス コストは削減されます。- 実行されている環境に関係なく、資格情報から資格情報へのフォールバック パスを選択します。
- どの資格情報が選択されたかを確認するには、デバッグを有効にします。
すべての環境で 資格情報の確実性を持つ
チームの場合、if/else などの制御フロー ステートメントを使用すると、各環境で選択された資格情報を把握できます。 - 別の資格情報の種類に切り替えることはできません。
- どの資格情報が指定されたために選択されたかを判断するためにデバッグする必要はありません。
資格情報チェーンのしくみ
実行時に、資格情報チェーンは、シーケンスの最初の資格情報を使用して認証を試みます。 その資格情報がアクセス トークンの取得に失敗した場合は、アクセス トークンが正常に取得されるまで、シーケンス内の次の資格情報が試行されます。 次のシーケンス図は、この動作を示しています。
DefaultAzureCredential を使用して柔軟性を高める
DefaultAzureCredential は、事前構成済みの資格情報チェーンです。 これは、最も一般的な認証フローと開発者ツールと共に、多くの環境をサポートするように設計されています。 グラフィカルな形式では、基になるチェーンは次のようになります。
DefaultAzureCredential
が資格情報を試行する順序は次のとおりです。
並べ替え | 資格情報 | 説明 |
---|---|---|
1 | 環境 | 環境変数 のコレクションを読み取り、アプリケーション サービス プリンシパル (アプリケーション ユーザー) がアプリ用に構成されているかどうかを判断します。 その場合、DefaultAzureCredential はこれらの値を使用して Azure に対してアプリを認証します。 この方法は、サーバー環境で最もよく使用されますが、ローカルで開発する場合にも使用できます。 |
2 | ワークロードアイデンティティ | ワークロード ID が有効になっている Azure ホストにアプリがデプロイされている場合は、そのアカウントを認証します。 |
3 | マネージド ID | アプリがマネージド ID が有効な Azure ホストにデプロイされている場合は、そのマネージド ID を使用して Azure に対してアプリを認証します。 |
4 | Azure CLI | 開発者が Azure CLI の az login コマンドを使用して Azure に対して認証した場合は、同じアカウントを使用して Azure に対してアプリを認証します。 |
5 | Azure PowerShell | 開発者が Azure PowerShell の Connect-AzAccount コマンドレットを使用して 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()
);
前のコード サンプルでは、2 つの資格情報で構成されるカスタマイズされた資格情報チェーンを作成します。 ManagedIdentityCredential
のユーザー割り当てマネージド ID バリアントが最初に試行され、必要に応じて AzureCliCredential
が続きます。 グラフィカルな形式では、チェーンは次のようになります。
ヒント
パフォーマンスを向上させるには、運用環境のの資格情報の順序を最適化します。 ローカル開発環境で使用するための資格情報は、最後に追加する必要があります。
チェーンされた資格情報をデバッグする
資格情報チェーンをデバッグするには、Azure SDK ログ