8

REST仕様に従って、サービスはステートレスであると考えられます。認証を有効にすることが困難になります。私が読んだことのいくつかは、「ステートフルなRESTを世界の終わりにしない」と言っています。しかし、それはポイントではない、ポイントは仕様に従うことと一貫性があることです。RESTfulサービス認証

私は正しい方向に私を導くことができることを願ってここにこの質問をしています。私はSpring MVCを使ってRESTサービスを作成しています。私は意見がありません。これは、JSONを消費/生成する真のRESTサービスです。私はステートレスで、REST仕様に従うこのアプリケーションのための認証(そして権限の委譲)メカニズムを持つ必要があります。クライアントはJavaScript(Backbone.js、CoffeeScript)で書かれ、ユーザからのユーザ名/パスワードを受け入れます。次に、その情報をサーバーに送信します。

Springベースのアプリケーションで真のステートレス認証(および認証)を達成するにはどうすればよいですか?

ダイジェストSSLによる認証 - これは方法ですか?

+1

あなたが話すこの「REST仕様」とは何ですか?これは仕様ではなく、デザインパターンと一連のガイドラインです。 – skaffman

答えて

2

セッション管理は状態管理と異なります。

ハンドシェイク中にサーバー側がトークンを生成する可能性があり、クライアントがコールするたびに、トークンを先頭に追加する必要があります。または、サーバーが分析して、続行するために呼び出します。

サーバは、アルゴリズムを使用して実行できるトークンの妥当性をチェックするために状態を維持する必要はありません。

+0

そして、サーバー側でどうすれば実現できますか? –

+0

しかし、アルゴリズムが何らかの理由でクラックされた場合は、任意のトークンをリソースにアクセスするために送信することができます – jsf

+0

そのトークンを暗号化する必要があります(単純にハッシュしたり、ハッシュしたりできます)。あなたが標準的な暗号化アルゴリズムを使用していて誰かがそれをクラックさせた場合、あなた自身のアプリケーション以上に業界にとって大きな問題があります。 SSLを使用することで、パケットが改ざんされることはありませんが、SSLを使用する必要はありません。FBI、Jboss、Sonyなどが侵害されているのを見ているので、不可能ではありませんが、標準的な方法を使用すれば平均的なジョーがハックできません。 – Shahzeb

2

Spring Securityの仕組みを見てきましたか? Springセキュリティの使用私は、カスタムHTTP認証ヘッダをクライアントからREST要求で追加することができました。これは抽出されたサーバー側で、要求元のユーザーが認証され、特定のリソースへのアクセスを許可することができます。

1

SSLでの基本認証またはダイジェスト認証のいずれも使用できますが、どちらも状態について重要な意味を持ちません。また、サーバーから返送されたクッキーがあるかもしれません。クライアントがさらにリクエストをしたときに返信する必要があります(と信じてください)。可能な他の認証メカニズムがありますが、それらはより複雑であり、必ずしも適切ではありません。 (もう1つは、クライアントが認証したSSLですが、ブラウザにはクライアントのSSLキーペアがインストールされていなければなりません。

サーバ側では、Spring Securityを使用すると、これらのすべてを簡単に処理できます。これはSpring MVCでうまく動作します。