在Node CLI应用程序中安全地存储数据

时间:2016-02-09 02:55:57

标签: javascript node.js api npm token

我目前正在编写NodeJS命令行应用程序。该应用程序进行API调用并将一些数据返回给用户。鉴于这是一个公共API,用户需要一个API令牌。此CLI将通过npm i -g super-cool-api-cli全局安装在用户的计算机上。

用户第一次运行CLI时会提示他们输入令牌,然后我将其存储,以便他们每次运行它时都不需要将它放入。我已经为用户提供了一种方式也重置它。我将它存储在CLI模块的实际目录中,如上所述,它是全局安装的,它看起来像这样:

fs.writeFile( __dirname+'/.token.json', JSON.stringify( { "token": token }, null, 2 ), 'utf8', (e)=>{
    // error handling and whatever
});

我将文件命名为.token.json,使用点至少默认隐藏文件。

我想我要问的是,如果在NodeJS命令行应用程序中存储更好/更安全的敏感信息,那么您将运行多次。我想过使用environment variables之类的东西,但它们似乎在过程结束时到期。

安全方面的考虑是我缺乏的一项技能,但非常希望了解更多信息,所以请提前感谢您的提示。

4 个答案:

答案 0 :(得分:4)

我认为最好使用操作系统提供的凭据存储设施来做这种事情,当然假设每个用户在计算机上都有自己的帐户。我所知道的唯一一个处理node-keytar的NPM包。

答案 1 :(得分:1)

您可以将您的令牌存储在sqlite中,并为sqlite.db文件设置用户名/密码,这里是sqlite https://github.com/mapbox/node-sqlite3

的绑定

答案 2 :(得分:0)

.ssh目录是存储密钥(例如密钥)的半常规位置。

  • 通常具有仅限于用户的ACL,并且
  • 您的文件将遵循相关的ACL模式
  • 此目录的典型文件包括未加密的秘密密钥。没有什么可以阻止您进一步加密。
  • 其中的点文件不应妨碍目录的典型用途。

答案 3 :(得分:0)

存储此类令牌的标准位置在用户的<div class="column" style="max-width: 25%;">文件中(请参见specifications here)。 Heroku为此example做这件事。 该标准的一个很好的结果是,存在用于读取/写入此文件的库(例如netrc-rw)。