web-dev-qa-db-ja.com

REST HTTP認証-どのように?

そこで、RESTeasyとGoogle AppEngineを使用してREST Webサービスを開発しています。私の質問はGAEとは関係ありませんが、重要な場合に備えて言及しました。当然、私のリソースと私自身のユーザー(Googleではない)を保護するため。

REST Webサービスを保護することは、非常に物議を醸す主題、または少なくとも非常に「リベラルな」主題のようです。RESTは、この問題に標準を課しません。私がWebと文献で調査したことから、私のアプリケーションに適合すると思われるアプローチが少なくとも3つあります。

  • HTTP Basic(SSL付き)
  • HTTPダイジェスト(SSL付き)
  • OAuth

OAuthは最も完全なアプローチのようです。ただし、サードパーティのアプリケーションを承認する必要がないため、このような複雑さは必要ないと思います。これは、私自身のクライアントアプリケーションによってのみ使用されるWebサービスです。

HTTP BasicおよびHTTP Digestは、Web上で最も単純なものとして表示されます、しかし実際には、たとえば、RESTeasyを使用してそれらの具体的な実装を見つけたことがありません。 RESTeasyのドキュメントで このページこれ を見つけました。それらは確かに非常に興味深いものですが、この主題(HTTP基本またはダイジェスト)についてはほとんどまたはまったく説明していません。

だから、ここで私は尋ねています:

RESTeasyでHTTP BasicまたはDigestを使用してWebサービスを保護するにはどうすればよいですか?

おそらくそれは非常に単純なので、ドキュメントや他の場所で言及する価値はありませんか?また、RESTful Webサービスの保護に関する洞察を誰かが私に提供してくれるなら、それは役に立つかもしれません。

私は正しいアプローチを選択していますか?

26
miguelcobain

RESTeasyのインターセプターを使用してこれを達成することができました。基本的に、リクエストはクラスのようなリスナーを使用してインターセプトされます。このクラスでは、リクエストのHTTPヘッダーを検査してから、通常のBasic-Authプロセスが続行されます。

便利なリンク:

http://en.wikipedia.org/wiki/Basic_access_authentication
メッセージヘッダーのパラメーターをREST API で渡す
http://www.alemoi.com/dev/httpaccess/ (サーブレット部分)

これが誰にでも役立つことを願っています。

ありがとう。

6
miguelcobain

REST APIを保護する最も簡単な方法は、SSLを介したHTTP基本認証を使用することです。ヘッダーは暗号化されているため、ダイジェストを使用する意味はあまりありません。これは、維持できる限りうまく機能するはずです。クライアントで安全なパスワード。

6
Luke Francl

sSLを使用しない認証方法を使用すると、セキュリティ上のリスクに確実に直面します。

ただし、SSLを使用した場合は、通常、パフォーマンスが低下します。

Oauthは、実際には、サードパーティがWebサービスにアクセスできるようにするためのソリューションです。

選択が限られているため、認証を必要とする現在のWebサービスに対する私のソリューションでは、SSL +基本の組み合わせを使用していました。

1
ligerdave

OAuth 2 の使用を検討するかもしれません。 OAuth 1よりも大幅にシンプルで、FacebookやGoogleの大規模なREST APIで積極的に使用されています。

0
abraham