0

在 C# 中,我可以使用 AzureServiceTokenProvider,它允许我以多种方式访问​​ Azure Key Vault。如果我在本地运行,它将使用我的凭据,如果我在 Azure 中运行,它将使用 MSI,它将查找环境变量等。这真的很好,因为我不需要编写代码来处理运行具有不同身份验证机制的各种环境。

我似乎无法为节点找到类似的东西。看起来我必须编写代码来执行交互式登录、MSI、环境变量等。节点是否有类似 AzureServiceTokenProvider 的东西?处理各种身份验证场景的东西?

4

2 回答 2

1

使用loginWithAppServiceMSI()ms-rest-azure 中的方法将自动检测您是否在 WebApp 上并从 MSI 端点获取令牌。然后,代码很简单:

    function getKeyVaultCredentials(){
        return msRestAzure.loginWithAppServiceMSI({resource: 'https://vault.azure.net'});
    }

    function getKeyVaultSecret(credentials) {
        let keyVaultClient = new KeyVault.KeyVaultClient(credentials);
        return keyVaultClient.getSecret(KEY_VAULT_URI, 'secret', "");
    }

    getKeyVaultCredentials().then(
        getKeyVaultSecret
    ).then(function (secret){
        console.log(`Your secret value is: ${secret.value}.`);
    }).catch(function (err) {
        throw (err);
    });

如果您需要一种回退机制来允许此代码自动从 MSI 切换到另一种方法,您可以测试环境变量:

function getKeyVaultCredentials(){
  if (process.env.APPSETTING_WEBSITE_SITE_NAME){
    return msRestAzure.loginWithAppServiceMSI({resource: 'https://vault.azure.net'});
  } else {
    return msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain);
  }
}
于 2019-11-14T05:30:58.973 回答
1

较旧的软件包azure-keyvault将要求您使用该ms-rest-azure软件包来创建没有后备选项的凭证/令牌提供者。

azure-keyvault@azure/keyvault-keys现在已弃用,取而代之的是新软件包,分别通过@azure/keyvault-secrets和分别处理 Keyvault 密钥、机密和证书@azure/keyvault-certificates

这些包从新@azure/identity包中获取凭据。凭证之一是DefaultAzureCredential具有您正在寻找的回退机制。有关更多详细信息,请参阅@azure/identity 的自述文件

于 2020-12-22T02:54:17.150 回答