我曾经使用过azure-keyvault,但现在它已经被弃用了。我用来加密和解密东西。我需要操作的只有clientId、clientSecret和密钥标识符。
因为现在不推荐使用azure-keyvault,所以我改用@azure/keyvault-keys/@azure/identity。为此,我需要一个租户(ClientSecretCredential),这是我以前不需要的。为什么会这样,或者有没有不需要它的方法?
发布于 2020-04-15 16:51:01
在使用ClientSecretCredential时,因为服务主体属于特定租户,所以必须指定该租户,而不是像以前的代码那样在回调中返回该租户。
有许多不同的凭证类型,但我们建议使用DefaultAzureCredential,它支持MSI、环境凭证(使用$AZURE_TENANT_ID、$AZURE_CLIENT_ID和$AZURE_CLIENT_SECRET的服务主体),以及大多数语言的交互式浏览器登录-很快就会有更多的凭证,比如azure CLI和Visual Studio。通过对azure CLI的支持,这提供了与您使用的更老的软件包的奇偶校验。通过使用DefaultAzureCredential,您就可以获得所有这些,并且它默认支持不同的环境,因此您不必更改代码即可为开发、试运行或生产环境使用不同的凭据。
因此,就像在引用的示例中一样,您只需实例化一个DefaultAzureCredenial即可。如果您定义了服务主体环境变量,则在未检测到Managed Identity (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);凭据的顺序针对生产工作负载进行了优化,但支持开发人员机器-与我上面列出的顺序非常接近。
https://stackoverflow.com/questions/61114810
复制相似问题