Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么Azure KeyVault getSecret返回承诺<;待定>;?_Node.js_Azure_Azure Keyvault - Fatal编程技术网

Node.js 为什么Azure KeyVault getSecret返回承诺<;待定>;?

Node.js 为什么Azure KeyVault getSecret返回承诺<;待定>;?,node.js,azure,azure-keyvault,Node.js,Azure,Azure Keyvault,我遵循了Microsoft教程中关于此链接的内容:但我希望将它们作为单独的函数,而不是将它们放在一个主函数中 这就是我所拥有的,setSecret工作正常,但getSecret正在返回承诺 我不确定您是否正在试图找到一种方法,使您能够在nodejs中获取关键的保险库机密。作为上面提到的快速入门示例,microsoft为NodeJ提供了一个异步方法await client.getSecret(secretName) 在这里,我建议您访问密钥库机密。调用api时,需要生成一个访问令牌作为请求头,您可

我遵循了Microsoft教程中关于此链接的内容:但我希望将它们作为单独的函数,而不是将它们放在一个主函数中

这就是我所拥有的,setSecret工作正常,但getSecret正在返回承诺


我不确定您是否正在试图找到一种方法,使您能够在nodejs中获取关键的保险库机密。作为上面提到的快速入门示例,microsoft为NodeJ提供了一个异步方法
await client.getSecret(secretName)

在这里,我建议您访问密钥库机密。调用api时,需要生成一个访问令牌作为请求头,您可以参考或查看下面的测试项目

调用api:

const axios = require('axios');
const auth = require('./credenticalflow');

let vaultName = 'key vault name';
let keyName = 'key name';
let accesstoken = '';
let secret = '';

init();

async function init(){
    const authResponse = await auth.getToken(auth.tokenRequest);
    accesstoken = authResponse.accessToken;
    getsecret(vaultName,keyName,accesstoken);
    console.log("22222222:"+secret);
}

 function getsecret(vaultName,keyName,token){
     console.log('the token is :'+ token);
    axios.get('https://'+vaultName+'.vault.azure.net/secrets/'+keyName+'/7d4b682f5c9a41578602aa5b86611aa7?api-version=7.1',{
        headers: {
            'Authorization': 'Bearer '+token
        }
    })
    .then(function (response) {
        // handle success
        secret = response.data.value;
        console.log("1111111:"+secret);
    })
    .catch(function (error) {
        // handle error
        console.log('error');
    });
}
生成访问令牌:

const msal = require('@azure/msal-node');

const msalConfig = {
    auth: {
        clientId: 'azure ad app cilent id',
        authority: 'https://login.microsoftonline.com/<your tenant name such as xx.onmicrosoft.com>',
        clientSecret: 'client secret for the azure ad app',
    }
};

const tokenRequest = {
    scopes: ['https://vault.azure.net/.default'],
};

const cca = new msal.ConfidentialClientApplication(msalConfig);

async function getToken(tokenRequest) {
    return await cca.acquireTokenByClientCredential(tokenRequest);
}

module.exports = {
    tokenRequest: tokenRequest,
    getToken: getToken
};
const msal=require(“@azure/msal节点”);
常量msalConfig={
认证:{
客户端id:“azure ad应用程序客户端id”,
当局:'https://login.microsoftonline.com/',
clientSecret:“azure广告应用程序的客户端密码”,
}
};
常量令牌请求={
范围:['https://vault.azure.net/.default'],
};
const cca=新的msal机密客户端应用程序(msalConfig);
异步函数getToken(令牌请求){
返回等待cca.acquireTokenByClientCredential(令牌请求);
}
module.exports={
tokenRequest:tokenRequest,
getToken:getToken
};

getSecret和
setSecret
都返回一个
Promise
,因为它们是需要向密钥保管库服务发出HTTP请求的异步方法

如果要尝试以下操作:

const secretPromise = client.setSecret(secretName, secretValue);
您会注意到,
secretPromise
是根据

这允许您等待设置密码,然后取回新设置的密码:

const secret = await client.setSecret(secretName, secretValue);
请注意,如果不等待
setSecret
调用成功,您将无法:

  • 获取新创建的秘密(除非你幸运地掌握了时机)
  • 如果
    setSecret
    失败,将收到通知并处理任何错误(您可以通过使用无效的密钥库URL创建机密客户端并运行这两个函数来验证这一点-
    azureSetSecret
    将声明成功,但
    azureGetSecret
    将抛出错误)

请不要共享代码截图,而是共享代码。返回
Promise
有什么问题?SDK提供了这种方法。你想找到一个同步方法吗?通过rest api获取密钥保险库机密也是一个异步方法,我在下面发布了详细信息。如果你觉得我的帖子对你有帮助,你能选择它作为答案吗?如果出现进一步的问题,请随时在此添加评论。