问题描述
客户已创建密钥库并存储凭证。为了对密钥库进行身份验证,我已经在节点中创建了应用程序,并使用客户端ID和客户端密钥,我能够读取密钥。但是现在客户不希望使用客户ID和客户机密,而是使用AZURE的用户名和密码来访问程序中的密钥库。它是一位专用用户,无需MFA即可进行密钥库访问。
我不确定是否可以从节点js使用用户名和密码访问密钥仓库。请提出。
谢谢
解决方法
对于此要求,我还认为不需要使用用户名-密码流,并且客户端凭据流应该更好(如注释中提到的juunas)。但是,如果客户仍然想使用用户名-密码流来实现,我可以提供以下示例供您参考:
如果您的应用程序是Web平台,则在运行节点js代码时,即使使用用户名密码流,也会显示错误消息,要求您提供“客户端机密”。
2。。您需要向您的应用添加天蓝色密钥存储库权限。 而且不要忘了获得管理员的同意。
3。。然后,您可以参考下面的代码以获取秘密值。
const KeyVault = require('azure-keyvault');
const { AuthenticationContext } = require('adal-node');
const clientId = '<clientId>';
const username = '<username>';
const password = '<password>';
var secretAuthenticator = function (challenge,callback) {
var context = new AuthenticationContext(challenge.authorization);
return context.acquireTokenWithUsernamePassword(challenge.resource,username,password,clientId,function(
err,tokenResponse,) {
if (err) throw err;
var authorizationValue = tokenResponse.tokenType + ' ' + tokenResponse.accessToken;
return callback(null,authorizationValue);
});
};
var credentials = new KeyVault.KeyVaultCredentials(secretAuthenticator);
var client = new KeyVault.KeyVaultClient(credentials);
client.getSecret("https://<keyvaultname>.vault.azure.net/","<secret name>","<secret version>",function (err,result) {
if (err) throw err;
console.log("secret value is: " + result.value);
});