【问题标题】:Why do I need a tenant when using @azure/keyvault-keys with @azure/identity, but not when using azure-keyvault?为什么在使用 @azure/keyvault-keys 和 @azure/identity 时需要租户,但在使用 azure-keyvault 时不需要?
【发布时间】:2020-04-09 05:57:02
【问题描述】:

我使用的是azure-keyvault,但现在已弃用。我用于加密和解密东西。我只需要操作clientId、clientSecret和密钥标识符。

因为现在 azure-keyvault 已被弃用,所以我切换到 @azure/keyvault-keys/@azure/identity。为此,我需要一个以前不需要的租户 (ClientSecretCredential)。为什么会这样,或者有没有办法不需要它?

【问题讨论】:

  • 据我所知,您将使用ms-rest-azure 包来创建凭据,然后将其传递给azure-keyvault 包中的KeyVaultClientms-rest-azure 中的客户端 ID 和客户端密码相关登录方法将是 withServicePrincipalSecret,它采用 clientIdclientSecretdomain。这个domain 只不过是tenantId。在不知道域/租户 ID 的情况下,您在哪里使用其他方式获取凭据?

标签: node.js azure-keyvault


【解决方案1】:

使用ClientSecretCredential 时,由于服务主体属于特定租户,您必须指定该租户,而不是像旧代码那样在回调中返回。

有许多不同的凭据类型,但我们建议使用支持 MSI 的 DefaultAzureCredential、环境凭据(服务主体使用 $AZURE_TENANT_ID$AZURE_CLIENT_ID$AZURE_CLIENT_SECRET)以及大多数语言的交互式浏览器登录- 很快就会有更多凭据,如 azure CLI 和 Visual Studio。借助对 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);

凭据的顺序针对生产工作负载进行了优化,但支持开发人员机器 - 非常接近我在上面列出的顺序。

【讨论】:

  • 我使用它的方式是微服务后端的一部分,其中凭据是传入的,而不是来自环境(在这一点上它必须是灵活的)。因此,除了 clientId、clientSecret 和 key-URI 之外,我从来没有其他任何东西。我使用的是来自adal-nodeAuthenticationContext,但没有任何额外的配置。
  • 嘿菲利普,当您说“凭据已传入”时,您指的是 clientId 和 clientSecret 信息吗?您是如何解决无法访问租户 id 的问题的?
  • 我没有。这就是为什么我想知道为什么我在新版本中需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多