簡體   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