10

5 分ごとに WebServices を使用して外部 API に接続する必要がある ASP.Net C# アプリケーションがあります。

外部 Web サービスの要件は次のとおりです。

  • ユーザー名とパスワードが必要です
  • 各 Web サービス要求でユーザー名とパスワードを送信する必要があります
  • パスワードは 90 日ごとに期限切れになり、有効期限が切れる前に変更する必要があります
  • パスワードを手動で (人間が) 変更することはできません。私のアプリケーションは、別のパスワード変更 Web サービスに接続してパスワードを変更する必要があります。
  • 私のアプリケーションは、一連のルールに基づいて新しいパスワードをそれぞれ生成する必要があります。
  • パスワードを再利用することはできません。
  • SSL、証明書、およびファイアウォールの IP 制限が必要です

以前のものはすべて作成しましたが、現在 1 つの問題があります。現在および過去のパスワードを保存するためのベスト プラクティスは何ですか?

明らかに、プレーンテキストのパスワードを保存することは悪い解決策です。Webサービスにパスワードを読み取らせ、リクエストごとに送信できるようにする必要があります。また、新しく生成されたパスワードが重複していないことを確認するために、すべての過去のパスワードにアクセスできる必要があります。

理想的には、各 (暗号化された) パスワードをデータベースに保存し、Web サービスを呼び出す必要があるたびに復号化したいと考えています。私が従うべきベストプラクティスはありますか? Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric(..) を使用して各パスワードを暗号化する必要がありますか?

注: 残念ながら、外部 API の機能を変更するアクセス権はありません。私は定められた規則に従わなければなりません。

4

3 に答える 3

6

パスワード履歴に関しては、次の 2 つのルートのいずれかをたどります。

  1. 現在の計画に従って、パスワードを file/db/config に保存します。(暗号化ではなく) ハッシュ アルゴリズムを使用して、新しいパスワードと保存されているパスワード ハッシュを「等しい」かどうか比較することをお勧めします。

  2. パスワード履歴を保存する必要はまったくありません。パスワード変更 Web サービスへの最初の試行が失敗した場合は失敗し、別のパスワードを使用して再送信してください。このようにして、パスワード変更 Web サービスのビジネス ルールを複製することはありません (たとえば、6 か月後にパスワードを再利用できるように変更するとします)。

現在のパスワードの保存に関して: パスワードをプレーンテキストとして送信する必要があると仮定すると、はい、暗号化された形式で保存する必要があります。これを行う方法については、多くの記事があります。または、ここに表示されているように、構成ファイルの特定のセクションを暗号化することもできます。

于 2011-06-28T22:34:09.113 に答える
0

ASP.NET IIS 登録ツール (Aspnet_regiis.exe) は、web.config のセクションを暗号化および復号化できます。ASP.NET 2.0 は実行時に魔法のようにセクションを復号化するため、アプリケーションに特別なコードは必要ありません。

http://msdn2.microsoft.com/en-us/library/zhhddkxy.aspx

于 2011-06-28T22:29:16.083 に答える