![](/img/trans.png)
[英]How to access Key Vault with Azure Managed Service Identity in node?
[英]callback on azure key vault
我正在使用 azure-keyvault 来存储机密,我想在我的配置文件中使用机密,但在回调时遇到了一些问题。 问题是在调用 bookshelf.js 之前没有返回秘密,并且密码未定义:
配置文件:
var environment = process.env.NODE_ENV || 'development';
module.exports = require('./env/' + environment + '.js');
keyvault.js:
var sqlPassword = function(){
var promise = new Promise(
function resolver(resolve, reject) {
var secretId = secrectUri + 'secrets/password';
client.getSecret(secretId, function(err, result) {
if (err) throw err;
resolve(result.value);
});
}
);
};
module.export = {
sqlPassword: sqlPassword()
};
环境/开发.js
var secret = require('../keyvault');
module.exports = {
db: {
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'sa',
password : secret.sqlPassword,
database : 'avin',
charset : 'utf8'
},
debug: true
}
};
书架.js
var config = require('./config');
var knex = require('knex')(config.db);
var bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');
module.exports = bookshelf;
应用程序.js
var config = require('./config/config');
var express = require('express');
var app = express();
var bookshelf = require('./config/bookshelf');
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(8000, function () {
console.log('Example app listening on port 8000!');
});
您的代码有两个问题。
首先,您声明了promise
对象,但从未调用过它。
密钥库.js
var sqlPassword = function(){
//promise code
return promise;
};
module.exports = {
sqlPassword: sqlPassword
};
环境/开发.js
module.exports = {
db: {
//some other code
connection: {
password : secret.sqlPassword().then(function(result){
return result;
}),
},
//some other code
}
};
希望,它有帮助。
azure-keyvault
包已被弃用,取而代之的是分别处理 Keyvault 密钥、机密和证书的新包。 对于您的方案,您可以使用新的@azure/keyvault-secrets包。
新包中的方法使用承诺而不是回调。 这应该会大大简化您的代码。 要将您的应用程序从旧包中移出,您可以查看迁移指南,其中列出了主要差异和需要注意的事项。
对您的代码的主要更改将是:
var sqlPassword = async function(){
const credential = new DefaultAzureCredential();
const client = new SecretClient(KEY_VAULT_URI, credential);
const secret = await client.getSecret(secretName);
return secret.value;
};
要了解 DefaultAzureCredentiual 的工作原理,请参阅@azure/identity的自述文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.