1

私のアプリケーションは Eclipse リッチ クライアントで、認証および承認機能を追加したいと考えています。ユーザーとロールはデータベースに保存され、アプリケーションにはユーザーとロールを管理できる Web ベースの管理コンソールもあります。この管理コンソールで Spring セキュリティを利用しています。

だからここに私の要件があります:

シック クライアントでユーザーにログイン ダイアログ ボックスを提供したいと考えています。認証はサーバー側 (Web サービスの場合もあります) で実行する必要があり、ロールはシック クライアントに流れ込む必要があります。どうにかして、サーバー側でセッションを管理したいとも思っています。

これを行う簡単な方法は本当に考えられません。Spring Rich Client を使用すると、サーバー側の Spring Security とうまく統合できることはわかっています。しかし、それは現時点で私にとって選択肢ではありません。

これを達成する方法について、あなたの考えを共有してください。あなたの助けに感謝。

4

4 に答える 4

2

最近、 Challenge-Response-authenticationを使用して同様のアプリケーションを開発しました。基本的に、Webサービスまたはサーバーには3つのメソッドがあります

getChallenge(username) : challenge
getSession(username, response) : key
getData(username, action?) : data

getChallenge は、クライアントが自分のパスワードでハッシュして getSession に送り返す値 (ランダムな値またはタイムスタンプなど) を返します。サーバーは、たとえばユーザー名とチャレンジをマップに保存します。

getSession では、サーバーは同じハッシュを計算し、クライアントからの応答と比較します。正しければ、セッション キーが生成されて保存され、ユーザーのパスワードで暗号化されてクライアントに送信されます。これで、getData を呼び出すたびに、セッション キーを使用してデータを暗号化できます。クライアントは getSession で既に検証されているため、再度「ログイン」する必要はありません。

これの良いところは、パスワードがプレーン テキストで送信されることがないことです。誰かが傍受している場合、パスワードはランダムな値でハッシュされるため、getSession の呼び出しを偽造することは困難です (たとえば、呼び出しをリプレイすることによって)。getSession からのキーはユーザーのパスワードで暗号化されて送信されるため、攻撃者はそれを解読するためにパスワードを知る必要があります。最後に、ユーザーを検証する必要があるのは 1 回だけです。これは、getData の呼び出しでユーザーのセッション キーを使用してデータが暗号化されるため、「気にする」必要がなくなるためです。

于 2010-03-06T12:32:56.213 に答える
2

あなたは Web サービスに傾倒しているので (あなたのように聞こえます)、リッチ クライアント (ユーザー ID とパスワードを想定しています) からユーザー情報を取得し、WS-Security を使用して暗号化された情報を Web サービスに送信することを検討します。 、Web サービスに認証処理を行わせる。また、ユーザーに関する情報 (姓/名など) をリッチ クライアントに返す Web サービスについても考えます。

于 2010-02-24T17:07:33.833 に答える
1

同様の要件があると思います。私たちの場合には:

  • ユーザーはログイン時にユーザー名とパスワードを提供します
  • これをUSERテーブルと照合して確認してください(パスワードはプレーンテキストではありません)
  • 有効な場合、セッションを 20 分間持続させます。シッククライアントがデータの取得またはデータの保存を行うたびにユーザー名とパスワードをチェックしたくありません (それを行うこともできます。実際、それは世界の終わりではありませんが、追加の DB 操作です)。それは不要です)

私たちの場合、ブール値の「アクセス権があるかどうか」だけでなく、考慮すべき多くの特権があります。私が考えているのは、グローバルに一意のセッション トークン/キー (java.util.UUID など) を生成し、シック クライアントが何らかのローカルのThickClientSessionオブジェクトに保持することです。

シック クライアントが操作を開始するたびに( getLatestDataFromServer()の呼び出しなど) 、このセッション キーがサーバーに渡されます。

アプリケーション サーバー (Tomcat で実行される Java Web アプリケーションなど) は、このセッション キーの記録を除いて、基本的にステートレスです。午前 10 時にログインすると、アプリ サーバーはセッション キーを午前 10 時 20 分まで有効であると記録します。午前 10 時 5 分にデータを要求すると、セッション キーの有効期間は午前 10 時 25 分まで延長されます。セッションに付随するさまざまな特権レベルも状態に保持されます。これは、UUID をキーとする単純な Map コレクションを介して実行できます。

これらの呼び出しを行う方法については、Spring HTTP Invoker をお勧めします。それは素晴らしい。本格的な Spring Rich Client インフラストラクチャは必要ありません。Java クライアント テクノロジに非常に簡単に統合できます。たとえば、Swingを使用してそうしています。これは、セキュリティ目的で SSL と組み合わせることができます。

とにかく、それは私がそれに取り組むことを計画している方法です。これが役に立つことを願っています!

于 2010-03-04T11:28:59.123 に答える
0

おそらくこれはあなたを助けるでしょう:

http://prajapatinilesh.wordpress.com/2009/01/14/manually-set-php-session-timeout-php-session/

特にこれに注意してください(ガベージコレクションを強制するため):

ini_set(’session.gc_maxlifetime’,30);
ini_set(’session.gc_probability’,1);
ini_set(’session.gc_divisor’,1);

session.cookie_lifetime という別の変数もあり、これも変更する必要がある場合があります。

IIRC、少なくとも 2 つ、場合によってはそれ以上の変数を設定する必要があります。それらが何だったのかは一生覚えていませんが、複数あったことは覚えています。

于 2010-02-24T16:46:19.703 に答える