[英]Why do I need a tenant when using @azure/keyvault-keys with @azure/identity, but not when using azure-keyvault?
我使用的是azure-keyvault
,但現在已棄用。 我用於加密和解密東西。 我只需要操作clientId、clientSecret和密鑰標識符。
因為現在azure-keyvault
已棄用,所以我切換到@azure/keyvault-keys
/ @azure/identity
。 為此,我需要一個以前不需要的租戶( ClientSecretCredential
)。 為什么會這樣,或者有沒有辦法不需要它?
使用ClientSecretCredential
時,由於服務主體屬於特定租戶,因此您必須指定該租戶,而不是像舊代碼那樣在回調中返回。
有許多不同的憑據類型,但我們的建議是使用支持 MSI、環境憑據(使用$AZURE_TENANT_ID
DefaultAzureCredential
$AZURE_CLIENT_ID
和$AZURE_CLIENT_SECRET
的服務主體)和大多數語言的交互式瀏覽器登錄的 DefaultAzureCredential - 很快就會使用更多憑據,例如 azure CLI和視覺工作室。 通過對 azure CLI 的支持,它提供了與您使用的舊軟件包的奇偶性,然后是一些。 只需使用DefaultAzureCredential
即可獲得所有功能,並且默認情況下它支持不同的環境,因此您無需更改代碼即可為開發、暫存或生產環境使用不同的憑據。
因此,就像在引用的示例中一樣,您只需實例化一個DefaultAzureCredenial
即可。 如果您定義了服務主體環境變量,則在未檢測到托管標識 (MSI) 時將使用它們。
import { SecretClient } from '@azure/keyvault-secrets';
import { DefaultAzureCredential } from '@azure/identity';
import { CosmosClient } from '@azure/cosmos';
const keyVaultUrl = process.env('APP_KEY_VAULT_URI');
const credential = new DefaultAzureCredential();
let storageClient;
let cosmosClient;
async function configureClients() {
const kvClient = new SecretClient(keyVaultUrl, credential);
const storageUri = await client.getSecret('storageUri');
const cosmosDbConnectionString = await client.getSecret('cosmosDb');
cosmosClient = new CosmosClient(cosmosDbConnectonString);
storageClient = new BlobServiceClient(storageUri, credential);
憑證的順序針對生產工作負載進行了優化,但支持開發人員機器 - 非常接近我在上面列出的順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.