在C#中,我可以使用AzureServiceTokenProvider,它允许我以多种方式访问Azure密钥保管库。如果我在本地运行,它将使用我的凭据,如果我在Azure中运行,它将使用MSI,它将查找环境变量等。这非常好,因为我不需要编写代码来处理在其中运行具有不同身份验证机制的各种环境。
我似乎找不到用于节点的类似内容。看来我必须编写代码来进行交互式登录,MSI,环境变量等。节点是否有类似AzureServiceTokenProvider的东西?可以处理各种身份验证方案的东西吗?
在C#中,我可以使用AzureServiceTokenProvider,它允许我以多种方式访问Azure密钥保管库。如果我在本地运行,它将使用我的凭据,如果我在Azure中运行,它将使用MSI,它将查找环境变量等。这非常好,因为我不需要编写代码来处理在其中运行具有不同身份验证机制的各种环境。
我似乎找不到用于节点的类似内容。看来我必须编写代码来进行交互式登录,MSI,环境变量等。节点是否有类似AzureServiceTokenProvider的东西?可以处理各种身份验证方案的东西吗?
使用ms-rest-azure中的loginWithAppServiceMSI()
方法将自动检测您是否在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);
}
}
,
较旧的包 azure-keyvault
会要求您使用 ms-rest-azure
包来创建没有后备选项的凭证/令牌提供者。
azure-keyvault
现在已被弃用,取而代之的是分别通过 @azure/keyvault-keys
、@azure/keyvault-secrets
和 @azure/keyvault-certificates
分别处理 Keyvault 密钥、机密和证书的新软件包。>
这些包从新的 @azure/identity
包中获取凭据。凭据之一是 DefaultAzureCredential
,它具有您正在寻找的回退机制。请参阅readme for @azure/identity了解更多详情