使用用户名和密码进行密钥验证

问题描述

客户已创建密钥库并存储凭证。为了对密钥库进行身份验证,我已经在节点中创建了应用程序,并使用客户端ID和客户端密钥,我能够读取密钥。但是现在客户不希望使用客户ID和客户机密,而是使用AZURE的用户名和密码来访问程序中的密钥库。它是一位专用用户,无需MFA即可进行密钥库访问。

我不确定是否可以从节点js使用用户名和密码访问密钥仓库。请提出。

谢谢

解决方法

对于此要求,我还认为不需要使用用户名-密码流,并且客户端凭据流应该更好(如注释中提到的juunas)。但是,如果客户仍然想使用用户名-密码流来实现,我可以提供以下示例供您参考:

1。。您应该在AD中使用本机平台而非Web平台注册应用。 enter image description here enter image description here

然后请检查是否已启用“ 作为公共客户端处理应用程序”。 enter image description here

如果您的应用程序是Web平台,则在运行节点js代码时,即使使用用户名密码流,也会显示错误消息,要求您提供“客户端机密”。

2。。您需要向您的应用添加天蓝色密钥存储库权限。 enter image description here enter image description here 而且不要忘了获得管理员的同意。

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);
});