Node.js 为什么Azure KeyVault getSecret返回承诺<;待定>;?
我遵循了Microsoft教程中关于此链接的内容:但我希望将它们作为单独的函数,而不是将它们放在一个主函数中 这就是我所拥有的,setSecret工作正常,但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时,需要生成一个访问令牌作为请求头,您可
我不确定您是否正在试图找到一种方法,使您能够在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
调用成功,您将无法:
- 获取新创建的秘密(除非你幸运地掌握了时机)
- 如果
失败,将收到通知并处理任何错误(您可以通过使用无效的密钥库URL创建机密客户端并运行这两个函数来验证这一点-setSecret
将声明成功,但azureSetSecret
将抛出错误)azureGetSecret
Promise
有什么问题?SDK提供了这种方法。你想找到一个同步方法吗?通过rest api获取密钥保险库机密也是一个异步方法,我在下面发布了详细信息。如果你觉得我的帖子对你有帮助,你能选择它作为答案吗?如果出现进一步的问题,请随时在此添加评论。