2016-02-09 35 views
5

現在NodeJSコマンドラインアプリケーションを作成中です。アプリケーションはAPI呼び出しを行い、ユーザーに何らかのデータを返します。これが公開APIである場合、ユーザーはAPIトークンを要求します。このCLIは、npm i -g super-cool-api-cliを介してユーザーのマシンにグローバルにインストールされます。ノード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のようなものを使用することを考えましたが、プロセスの最後に期限切れになるようです。

セキュリティに関する考慮事項は多少不足していますが、詳細を知りたいと思っていますので、事前にヒントをお願いします。

+0

ノードCLIアプリケーションと同様のことをする必要があります。あなたは何の答えも受け入れていないことに気付きました。あなたは何をやったのですか?ありがとう! –

+0

@ JoshPinter [buttercup](https://buttercup.pw/)というモジュールを使用して、パスワードの後ろにデータを保存しました。 [議論はほとんどなかった](https://github.com/himynameisdave/git-labelmaker/issues/14)それは単なるように思えたからだ。このプロジェクトは[ここにある](https://github.com/himynameisdave/git-labelmaker)であり、アクティブなユーザーがたくさんいるので、このソリューションは私たちのためにうまくいったようだ: –

+0

お返事ありがとう!バターカップは素晴らしい1Password置換のように見えます。それはパスワードを保存するためのコアの使用についても考えなかった。乾杯! –

答えて

1

あなたはsqliteの中に自分のトークンを格納し、sqlite.dbファイル用のユーザー名/パスワードを設定することができ、ここで私はそれはOSが提供する資格貯蔵施設を使用するのが最善だと思うhttps://github.com/mapbox/node-sqlite3

+0

私は依然としてユーザーがローカルの機密ユーザー名/パスワードファイルを持っている必要がありますか?私は通常フロントエンドの人だからこのDB /セキュリティのものは私の頭の上に少しあるので、申し訳ありません... –

+0

@DaveLunny心配しないでください。はい、あなたはユーザー名とパスワードを入力する必要がありますが、格納されたトークンはファイルシステム上で安全で暗号化されます(私はセキュリティ上の問題だと思いました)。 CLIの場合、ユーザがセッションごとに1回だけ(CLI /端末ウィンドウで)ユーザ名とパスワードを入力するだけで済むように、ユーザ名/パスワードのセッション単位(メモリではなくファイルシステムではない)のキャッシュを作成できます。つまり、ユーザーは最初に端末を開いてCLIアプリケーションを実行するときにユーザー名とパスワードを入力するだけで済みます。 –

+0

うーん、それはかなり良いですが、私はそれがセッションのためだけに格納されていることは本当に好きではありません。それはユーザーフレンドリーではありませんが、暗号化されていないトークンがJSONファイルとして保存されるという問題を解決し、ユーザー名とパスワードの組み合わせを覚えていることは、毎回トークン全体を覚えている/コピーして貼り付けるよりも優れています。ありがとう! –

4

sqliteのためのバインディングですこの種のことについては、各ユーザーがマシン上に独自のアカウントを持っていることを前提としています。私が知っている唯一のNPMパッケージは、node-keytarです。

+0

実際にはかなり感謝しています。だから本質的に私は私のアプリケーションのためにパスワードとしてトークンを保存することができる新しいキーチェーン上の "サービス"を作成するだろうか? –

+0

はい、それは考えです。 –

関連する問題