2017-07-31 9 views
0

私は、JWTまたはoAuth 1.0がRestサービスを確保するための最良の方法であることを知りたいと考えています。DojoベースのWebアプリケーションとJAX-RSの残りのWebサービスを開発する予定です。Java Rest Serviceのセキュリティ:JSON WebToken(JWT)またはoAuth 1.0?

Javaで同じものを実装するためのサンプルコードを提案できれば、本当にうれしいでしょう。

ありがとうございました。

答えて

1

JWTとOAuthが標準です。 JWT標準は、状態を維持するためにサーバーとクライアント(ブラウザまたはAPI)の間で共有されるトークンを作成する方法を教えています。 従来は、jsession IDをサーバーによって作成されたトークンとして使用し、Cookieでクライアントに送信したり、URLのクエリとして送信したりしました。そのセッションIDは後でクライアントから各要求に対して繰り返しサーバーに送信されます。これは、サーバがメモリに存在するセッションオブジェクトをルックアップするために使用する識別子です。

ここで、JWTはセッションを維持するもう1つのアプローチです。セッションオブジェクトのユーザーの詳細を保持するのと同様に、JWTトークンにもトークン自体にユーザー情報が含まれます。そのため、JWTは情報そのものを含むため、JWTをバリュートークンと呼んでいます。一方、jsession Idは、サーバーによって管理されるセッションオブジェクトへの参照であるため、参照トークンです。

JWTにも長所と短所があります。 利点:クラスタ環境に最適 短所:トークンに安全な情報が含まれている場合は使用しないでください。 JWTはエンコードされているため、ネット上の悪意のあるユーザーが攻撃を受ける可能性があります。同じ時間に、jsession idは単なる参照であり、実際のデータはセッションオブジェクト内で永続しています。

あなたの要件に基づいて、セッションに保管したいものを選択肢から選択します。

OAuth:これは認可の基準です。ここでは、クライアントサーバーは認可サーバーからのユーザーデータ(リソース所有者)の認可を要求しています。 OAuth 2の基本的な例:サーバー上で実行されているオンラインゲームアプリケーションがあるとすると、ユーザーはユーザーのブラウザに読み込みを開始するアプリケーションにアクセスしました。今、このアプリケーションは、ユーザーがFacebookアカウントでゲームに関するデータを投稿できるようにするよう求めています。ここでは、OAuth標準を使用して自分のFacebookの投稿にアクセスするために、そのアプリケーションを許可します。内部メカニズムを参照してくださいhttps://tools.ietf.org/html/rfc6749

基本的に、アプリケーションのセキュリティは3つの主要な領域に対応しています。 1.認証 あなたは誰ですか? オープンIDまたは伝統的にログインベースの方法で行うことができます 2.許可 あなたがアクセスする権限を持っているリソース? がのOauth 3.整合性制約 アクセスセキュアなTLSレイヤ(SSL/HTTPS)経由自分のアプリケーションを介して達成することができる

これらの懸念を満たす必要があります任意のWebアプリケーションは、セキュアになるために。

1

これらは比類のないものです。 OAuthは、3DパーティサービスのSSO(シングルサインオン)シナリオに関するものですが、JWTは認証トークン形式に関するものです。少なくともOAuthは上記レベルの標準です。 OAuth 1.0では、2.0バージョンでは不要なクライアント側の暗号化が必要です。 JWTでは、1つのセキュリティ領域でステートレスなRESTサービスを組み合わせることができます。これは、REST APIを複数のマイクロサービスに分割すると大きな利点になります。

関連する問題