2013-07-05 14 views
13

私はREST webserviceの初心者で、初めてのWebサービスを作成しました。
私のサービスでは、ユーザーは希望のユーザー名とパスワードを与える簡単なフォームでプロファイルを作成できます。基本HTTP認証とREST Webサービス(Java + Jersey)の併用方法は?

ここで、ユーザーのログイン時にユーザーの資格情報を確認する方法はありますか?
私は、ユーザーがログインしていることを検証する簡単なフォームを持っていますが、追加/更新/削除のさまざまなプロファイル操作を実行するときにユーザーを検証する方法は何ですか?

例:
FBにログインすると、あなたの資格情報を持つクッキーが保存されます。「投稿ステータス」のような操作を実行すると、友達にメッセージします...など...尋ねませんあなたの資格情報がそこにあり、単にそのクッキーを使用するクッキーを持っているので、あなたのクレデンシャルはもう消えません...

しかし、RESTでは、クッキーを使用しないので、次のオプションはHTTPヘッダーです。 は、と私はHTTPヘッダ.IEを経由してユーザーの資格情報を送信し、受け取るために方法を知りたい
Basic HTTP Auth

+0

これ以上フィードバックが必要ですか?そうでなければ、私の答えはあなたに役立ちました。この質問に私の投稿を受け入れるかもしれません。 Greetz :) – benjiman

答えて

29

クライアント側

あなたはHTTP Authorizationヘッダーを使用するAPIに証明書を送信するために、資格情報を指定しますBasic username:passwordの形式で入力します。 username:password文字列は、Base64というエンコードスキームを使用してエンコードする必要があります。ですから、例えばヘッダは次のようなものになります:残りの仕様は、クライアント・サーバ間の通信はステートレスであることを述べたよう

Authorization: Basic d2lraTpwZWRpYQ== 

を、あなたはすべてのリクエストに応じて資格情報を使用してヘッダーを含める必要があります。通常は、クライアント側でセッションクッキーを使用してユーザーを識別します。これにより、ユーザーはすべての要求に対して資格情報を入力する必要がなくなります。

サーバー側があなたのジャージーRESTサービス内の資格情報を確認するには、あなたがキャッチし、すべての着信要求をインターセプトする必要があります。 JerseyにはContainerRequestFiltersという概念があります。ジャージContainerRequestFilterインタフェースを実装し、public ContainerRequest filter(ContainerRequest request)メソッドをオーバーライドする必要がBasicAuthFilter

<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
    <param-value>your.package.BasicAuthFilter</param-value> 
</init-param> 

参照されるクラス:Tomcatを使用している場合たとえば、あなたはこのようにあなたのweb.xmlにサーブレットの定義の中、このタイプのフィルタを追加することができます。メソッド内には、基本的に次の操作を行います:

  • がそれらをデコード要求のAuthorizationヘッダーからBase64エンコードされた資格情報をフェッチ(すなわち使用javax.xml.bind.DatatypeConverter.parseBase64Binary()
  • があなたのUserDao(または他のデータソースプロバイダー)を使用資格情報が有効かどうかを確認します。
  • 戻り状況コード401 Unauthorized検証が失敗した場合throw new WebApplicationException(Status.UNAUTHORIZED)
  • 資格情報が有効な場合は、単にあなたがthisブログ記事に非常に良い例を見つけることができますそれに

を処理する責任があるジャージーリソースにそれを委任するために、要求を返します。

+2

提供されているリンクの例は、JERSEY 1.xでのみ動作します。 2.Xでは動作しません。 – lonelyloner

+1

リンクされたブログの記事には、Jersey 2.xの例へのリンクが含まれています。https://simplapi.wordpress.com/2015/09/17/jersey-jax-rs-implements-a-http-basic-auth-decoder -for-2-x-branch / – CalumMcCall

関連する問題