16

Java EE 6を使用するWebアプリで、機能の一部をJsonRestServiceとして公開したいと思います。ログインに認証トークンを使用したいのですが、ユーザーはユーザー名とパスワードを送信し、サーバーはトークンを送り返します。トークンは、特定の時間のユーザーの追加リクエストでユーザーを承認するために使用されます。

これまで私を悩ませてきたいくつかの質問。

  • サーバーがトークンを作成してクライアントに送信する場合、サーバーは、ハッシュテーブルなどをユーザーIDとトークンのペアとして使用して、トークンをDBまたはBeanに保存する必要がありますか?

  • Java EE固有のAPIを使用してサポートを受けることはできますか、それともすべてカスタムコードである必要がありますか?

4

3 に答える 3

11

ここに私の入力があります:

  • サーバーを再起動する必要がある場合に備えて、すべてのユーザーのトークンを失いたくない場合に備えて、トークンをDBに保存します。リクエストを高速化するためにメモリに保存し、メモリに見つからない場合にのみDBで検索することもできます。

  • ヘッダーのトークンを受け入れます。残りのサービスをHTTPSに配置して、リクエストが暗号化されるようにします。そうすれば、リクエストでトークンを手動で暗号化することを心配する必要はありません。

  • 私はおそらくJAX-RSを見て、それが提供する機能を確認するでしょう

于 2012-12-21T09:13:11.583 に答える
6

私は最近、単純なセッショントークンアプローチと、共有シークレットとしてセッショントークンを使用してリクエストに署名するより安全な方法の両方を使用して、JAX-RSRESTAPIでロールベースの承認を設定する方法についてブログを書きました。

要約すると、次のようになります。

  • サーバーからセッショントークンをユーザーの識別子とともに取得します
  • トークンを使用して、リクエスト内の情報を暗号化します
  • また、タイムスタンプとナンス値を使用して、MITM攻撃を防ぎます
  • 最初に取得する場合を除いて、セッショントークンを前後に渡さないでください
  • セッショントークンに有効期限ポリシーを設定する
于 2013-03-06T17:37:36.323 に答える
1

トークンをBeanまたはハッシュテーブルに保存することは永続的ではありません。DBは実行間で存続します。

RESTを使用する場合は、パラメーターの認証をメソッドに渡すか、リクエストヘッダー自体に渡すことができます。暗号化は別の問題です。システムの規模やオープン度にもよると思います。セキュリティが最重要事項である場合は、はい、何らかの形式の暗号化を見つける必要があります。

私はSpringFrameworkSpringSecurityを使用して同様のことを行いました。これらのことは、これを使用すると比較的簡単です。カスタムコードを書くことは、車輪の再発明をすることです。あなたを助ける多くのフレームワークがそこにあります。ただし、フレームワークの学習曲線が得られます。

于 2012-12-21T09:17:18.877 に答える