在 MEAN Stack 中存储 API 个键

Storing API keys in MEAN Stack

寻找(安全地)存储 Google 的最佳方法将 API 密钥放入 MEAN 堆栈中。我打算使用 .env 文件,但我不确定如何着手实现它。我当前的解决方案是快速拉入 .env 变量,但我不确定从那里采取什么路线将密钥插入脚本标签。我无法从 angular 中找到任何关于如何为此使用模板的信息,所以我得出结论,我将不得不使用另一个模板库,如 handlebars。我真的不喜欢这种方法,还有其他 'best practices' 方法可以解决这个问题吗?

我推荐使用模块 node-env-file。这就是我在我的项目中使用的,我对此非常满意。它的设置非常简单(查看他们的文档)并且非常有用。它从 .env 文件中读取您的变量并将它们嵌入到您的 Node 项目中。

  • .env

    # your environment variables
    API_KEY1=abcd123
    
  • app.js

    var env = require('node-env-file');
    var API_KEY1 = process.env.API_KEY1;
    

我在我的一个项目中执行以下操作 - 它适用于我的 nodemon 开发环境。我通过 Heroku 中的配置变量存储相同的数据,这样就不必在我的存储库中包含密钥。

// loads confidential parameters to inject into process.env
var googlekey = fs.readFileSync("./ignored/privatekey.pem", "utf8");
var config    = require("./server/config/local.env");
config.PRIVATE_KEY = googlekey;

//run server using nodemon
gulp.task('serve', function(){
    return nodemon({
        script: 'index.js',
        watch: 'server/',
        // ignore: ['app/**/*', 'dist/*', 'node_modules/*'],
        env: config
    })
    .on('start', function () {
        // done();
    });
});

我假设您使用的是 Google 所指的 'Browser key'。但是,如果您使用的是 'Server key',那么您无论如何都不应该将密钥传递给您的客户端代码。

如果您使用 Express response.render() 生成 HTML,您可以将 API 键作为本地传递到 res.render,并引用它在您的 HTML 或模板中。

以下是我使用 Express 渲染的 jade 模板的片段,它与条纹 API 类似:

extends layout

block head-content
  script(src='https://js.stripe.com/v2/')
  script.
    // <![CDATA[
    Stripe.setPublishableKey('#{stripePublicKey}');
    // ]]>

听起来您正在将密钥存储在环境变量中,因此您可以将其传递到 Express 渲染引擎中:

res.render('index', {stripePublicKey: process.env.STRIPE_PUBLIC_KEY});

听起来你也想避免使用 jade 或其他一些模板引擎,所以你可以使用 EJS,这将允许你使用 'pure' HTML,但带有变量。这是一个很好的入门教程:

http://robdodson.me/how-to-use-ejs-in-express/

如果您已经拥有大量内容,并且不想为了获得传入的一个变量而将所有现有的 .html 文件重命名为 .ejs,您可以这样做:

app.engine('html', require('ejs').renderFile);

这里有更详细的描述:

http://expressjs.com/api.html#app.engine

听起来您已经在处理下方 link 中 'Best practices for securely using API keys' 下的其他最佳做法列表,但请特别确保您遵循了有关通过引荐来源限制访问的指南 URL。

https://developers.google.com/console/help/new/

祝你好运!

  • 蒂姆