簡體   English   中英

為什么在使用 @azure/keyvault-keys 和 @azure/identity 時需要租戶,但在使用 azure-keyvault 時不需要?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM