0

パフォーマンスを向上させるために、認証時に DB アクセスを回避しようとしています

多くの検索の後の有効な解決策は、暗号化された文字列をCookieに保存し、認証時に復号化しようとすることです。

したがって、次の方法が適切かどうか疑問に思っています。

  1. SSL経由ですべてを送信します(私は怠け者です..)
  2. プログラムにグローバル定数秘密鍵を設定する
  3. 登録とパスワードの変更時に新しいランダム検証文字列を生成し、それを User オブジェクトに保存します
  4. 検証文字列と秘密鍵を使用して暗号化された検証文字列を生成する
  5. 暗号化されていない検証文字列と暗号化された検証文字列を Cookie に保存する
  6. ユーザーがログインしようとすると、検証文字列を復号化し、元の検証文字列と照合します

それが「OK」のアイデアである場合、次のように実際に機能させるにはどうすればよいですか。

AES-256 のどの暗号化方式を使用すればよいですか?

Bouncycastle を使用して Java でこの種の暗号化/復号化を行うにはどうすればよいですか?

それが良い考えではない場合、認証時に DB にクエリを実行しないようにするにはどうすればよいですか?

よろしくお願いします!

4

1 に答える 1

0

上記で説明した問題は「RememberMe」と呼ばれます。問題を解決するための2つのアプローチ:

1)独自の認証フレームワークを作成します。

認証が成功したら、ユーザー名の暗号化された値をCookieに入れます(ハッシュを使用することは強くお勧めしません。また、ユーザーのパスワード値を入れないでください)。

クッキーはせいぜい2週間持続するはずです。

暗号化には、BouncyCastleでAES-256暗号化を使用してください: AESおよびPBEでBouncyCastle軽量APIを使用する方法 Cookieにプレーンな値を入れないでください。フレームワークがCookieの復号化に成功した場合、ユーザーは認証されます。フレームワークがCookieを復号化できない場合、またはCookieが存在しない場合、ユーザーは認証されません。ログアウトしたら、Cookieをクリーンアップしてください。

2)Spring Securityフレームワークの使用を検討してください: http ://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html

これは優れたフレームワークであり、多くの認証/承認の問題を解決します。

あなたの問題は「RememberMe」機能によって解決されます: http ://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-remember-me

さらに説明が必要な場合は教えてください。

よろしくお願いします、

マイケル

于 2013-03-07T15:35:35.917 に答える