2012-04-23 9 views
0

安全なシステムを構築していますが、メッセージを送信するユーザーがアクセスキーを受け取ったユーザーと同じであることを確認する必要があります。例。Java WSでセッション情報を保存する場所

ユーザBobは、彼だけのユニークなプロパティuniqueCodeを持ち、サーバからさまざまな情報を受け取ることができます。

さまざまな機密データを返すさまざまな方法があるWebサービスがあります。ユーザーが最初に使用しているクライアントは、Webサービスに接続すると、それは

  1. このユーザー
  2. ための疑似ランダムキーを生成するサーバー上でそのキーを保存していること、authenticateメソッドを経由してそうし、それを返しますユーザー。

その後、クライアントからWSへの要求には、uniqueCodeとそのキーが必要です。ペアが有効な場合、要求は必要な情報を返します。 x分間のアクティビティがなかった場合、キーは無効になり、クライアントはユーザーに再度ログインするように要求します。

私の質問は、サーバーにキーを格納する方法です。キーはJavaオブジェクトであり、シリアル化することができます。

マイオプション

  • セッションに保管してください。これは、同社のシニアプログラマが示唆したことですが、それは行く方法ではないようです。私が読んだところでは、WSは基本的なHTTPセッションに頼ってはならないことを示唆しています。
  • データベースに保管してください。可能な解決方法ですが、それは特定のデータベースを作成して、問題にまったく別のレベルを追加する必要があります。
  • バイナリで暗号化されたファイルに保管してください。これは行く道だと思われるが、それは?私はログイン時に鍵を生成するので、鍵+いくつかの情報をバイナリファイルに保存し、それを暗号化してユーザに渡すことができます。私が受け取ったキーがユーザーファイルを解読でき、その情報が正しい場合は、ユーザーが要求した情報を返します。

私の考えは正しいのですか、何か不足していますか?誰かが私のシステムにアクセスすると、dbに侵入するのは簡単ですが、別のユーザーのキーを知らずにファイルを解読するのは非常に難しいので、最後の方が最善の方法だと思います。

ありがとうございます!

答えて

1

キーを永続化して、サーバーの再起動後に使用できるようにする必要がありますか。

「はい」の場合は、データベース、ファイルシステム、またはあなたのために機能する他のメカニズムでキーを保持する必要があります。あなたがアプリケーションを移動したりアクセス権を変更したりする場合にファイルシステムに頼るのではなく、データベースを利用することになります。

もしそうでなければ、アプリ内のTime To Liveでいくつかのキャッシュを使用してみませんか? uniqueCodeをキーに使用し、暗号化キーを値として使用してください。人気のオプションは、次のようになります。あなたが手動で時間に古いセッションを清掃気にしない場合は

+0

はい、これが望ましいでしょうし、使いやすさの向上にもつながります。残念ながら、私が保持しなければならない鍵がオブジェクトであれば、それをどのようにMySQLデータベースに保存するのですか?シリアライズし、暗号化してから、ブロブとして保存しますか? –

+0

@JanisPeisenieksキーにテキスト形式がある場合は、シリアライズとBLOBの代わりに使用することができます。暗号化に関しては、誰かがあなたのデータベースを脅かす恐れがある場合はそれを行います - しかし、その時点では、とにかくユーザセッションよりも大きな心配があります。 – jmruc

+0

OK、ありがとう、いつも再確認を聞いてうれしい。 –

関連する問題