繁体   English   中英

在 Azure Key Vault 上回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM