![](/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.