web-dev-qa-db-ja.com

NodeとMongoDBに別のサイトのユーザー名とパスワードを保存する

これは、ユーザーのログイン詳細をアプリに保存することではなく、すでにハッシュとJWTトークンを使用しています。アプリの一部には、別のWebサイトのユーザーのログイン詳細を保存する必要があります。

たとえば、ユーザー名とパスワードを入力すると、システムに保存され、ノードサーバーは夜に目覚め、詳細を使用して他のシステムにログインし、必要なデータを引き出します。 Webサイトにログインするにはテキスト形式のパスワードが必要なので、これらの詳細をシステムに保存するための最良かつ最も安全な方法は何ですか。

これは、ユーザーのデータ収集の重要な部分を自動化しているため、ユーザーから許可を得ています。それは、他のウェブサイト/システムがデータを私たちに提供する他の方法がないことです。

3
AlexanderKaran

制約があるため、データベース内のパスワードを暗号化する必要があります。すべてのユーザー/パスワードを毎晩処理する場合は、ユーザー名を暗号化することもできます。ここには2つの基本的なオプションがあります。対称または非対称です。どちらの方法を選択する場合でも、高品質のライブラリを使用して暗号化を行い、修正と標準を最新に保つ必要があります。ここで難しいのは、秘密鍵を安全に保つことです。

ここで鍵ペア(非対称)を使用することをお勧めします。これは、サーバーに常に保存している公開鍵を使用してユーザーのパスワードを暗号化できることです。攻撃者がこのキーを取得できるかどうかは問題ではなく、広く利用できるようにすることができます。

毎晩のジョブが実行されると、秘密鍵を使用してパスワードを復号化し、データにアクセスします。あなたはこのキーを安全に保つ必要があります。これはこのフォーラムには広すぎるトピックですが、理想的にはこれはある種の Hardware Security Module(HSM) であるか、少なくともデータから分離されています。これがオプションではなく、暗号化されたデータと同じ場所にキーを保持する必要がある場合は、夜間のジョブのみが使用できるように、キーに別の場所に強力なパスワードを指定してください。

これが「カメがずっと下にある」タイプの問題になることに気付くかもしれません。秘密をどこに置いても、心配する必要のある別の場所になります。 HSMはシークレットへのアクセスを防ぐように物理的に設計されているため、この場合に役立ちます。これにより、鍵管理の課題の多くが軽減されます。

1
JimmyJames