2012-04-26 9 views
15

私は、さまざまなWebベースのAPIを保護するためのOAuthプロバイダを実装しています。ほとんどの頭痛は、私にOAuthを介してWebSocketsのセキュリティを確保しています。OAuth 2.0でWebSocket APIを保護することは可能ですか?

ブラウザに設定されたクライアントで完全に安全にすることはできますか?

ブラウザがサーバーのあるWebアプリケーションと比較してどのような危険性がありますか?

2足のOAuthを使用してwebsocketへの接続を制限するので、登録されたクライアントだけが拒否されることなくAPIとのWebSocket接続を取得できます。 WebSocket接続は常に(ブラウザからの)クライアント側で確立されるため、アクセストークンが盗まれたり誤使用されるのを防ぐことは可能ですか?
その時点で、Webアプリケーションクライアントappartからブラウザベースのクライアントを設定するのはURLだけです。

ブラウザベースのアプリケーションが安全でない場合、私はそれを存続させることができますが、少なくともWebベースのアプリケーションがWebsocketに安全にアクセスできるようにしたいと考えています。

しかし、その時点で私はaccessTokenがまったく必要であるかどうか自問しています。なぜなら私はorigin-URIを安全なメカニズムとして使うことができるからです。

答えて

8

はい、OAuthを使用してWebSocket接続を保護することができます。 Kaazing WebSocket Gatewayは、さまざまな方法(トークンベース、HTTPベース、またはクッキーベース)を使用した、認証と承認のための洗練されたアーキテクチャを備えています。

また、信頼できないクライアントを扱っている可能性のあるWeb上で安全な方法で行われます。 (または、少なくとも、信頼できないクライアントを扱っていると仮定してください)。

クライアントがWebSocket接続を試みると、ゲートウェイは要求を受け取ります。特定のサービス(すなわち、URL)が保護されるように構成されている場合、クライアントは挑戦される。

チャレンジを受け取ると、クライアントはトークンを供給する必要があります(この場合、設定されていると仮定します)。クライアントが以前に他のシステムやWebページにサインインしているため、すでにトークンを持っていれば、素晴らしいことです。そうでなければ、それを取得する必要があります。これは、セキュリティの選択に完全に依存します。この場合、OAuthトークンプロバイダに接続してトークンを取得します。これは、ユーザーが資格情報を提供する必要がないことを意味します。

クライアントにトークンがあると、それはチャレンジへの応答としてゲートウェイに送信されます。ゲートウェイは標準のJAASアーキテクチャをサポートしているため、ログインモジュールをプラグインして必要な認証を実行できます。この場合、トークンが有効なトークンであるかどうかを判定するためにトークンをトークンプロバイダに送ることができる。

これが有効な場合は、WebSocket接続が開き、続行できます。そうでない場合、要求は拒否され、接続は閉じられます。

これは、バックエンドアプリケーションを保護する利点があります。有効なユーザーだけがゲートウェイを通過します。さらに、Kaazing WebSocket GatewayはDMZに存在することができるため、認証されていないユーザーはメインファイアウォール内の信頼できるネットワークに入ることもありません。彼らは外で速く失敗する。

このアーキテクチャーは強力なセキュリティフレームワークであり、あなた自身のセキュリティー機構を導入するのではなく、Kaazing's Gatewayがどのセキュリティーフレームワークに接続するかは関係ありません。また、OAUthまたはOAuth2の場合、トークンを理解またはデコードする必要はありません。トークンプロバイダだけがそれを理解する必要があります。しかし、トークンプロバイダがセッションの期間を指定したい場合、それはトークンとともに含めることができ、ゲートウェイはそれを尊重します。

ブラウザベースのアプリケーションが安全でない場合、私はそれと一緒に暮らすことができますが、私は少なくとも、WebベースのアプリケーションはWebSocketのにアクセスするための安全な方法を持っていることを確認します。

Webベースのアプリケーションとブラウザベースのアプリケーションは、正しいアーキテクチャと実装で安全にすることができます。 Kaazingでは、Web上で信頼されていないクライアントを扱っており、それに応じてアーキテクチャを構築するという前提の下で常に動作します。

よろしく、 ロビン プロダクトマネージャー、Kaazing

+0

oauth-2ドラフトhttp://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-4.4のクライアントクレデンシャルのように、自分自身を認証する必要があります。そこには、それが秘密の顧客のためだけに使用されなければならないとも言われています。しかし、機密クライアントを持っていても、アクセスログをブラウザに送って(ws接続を確立するために)、それが公開されます。再利用から保護するためには、このaccessTokenを非常に短時間しか使用しないでください。 – JustGoscha

2

A:ここで

は、高レベルの記述を持っているドキュメントのカップルのセクションです資格認可は実行される認証と同じくらい安全ですアクセストークンを渡す前にそれは彼らが言う仕様の外です。したがって、資格認可に応じてトークンを出す前に、どのような認証方式を採用するかによって決まります。

ここで、クレデンシャルを取得するための安全な方法を設定したか、通常のOAuth2リクエストでブラウザにアクセストークンを取得したとします。

OAuth2仕様では、MACをダイジェストしたり、部分を暗号化したり、トークン内のデータを任意の数の方法で保護することができます。ブラウザー内のアクセストークンのセキュリティは、その情報に含まれる情報によって異なります。ユーザーが最小限の情報(ユーザーID、有効期限、バージョン、ダイジェスト)を含むように設計し、サーバー(つまりダイジェスト) 。トークンの内容は事実上任意です。システムによっては、トークンの代理として "コード"にアクセスすることさえできます。

ここで、保護された「安全な形式」のアクセストークンがあり、時間制限があるとします。 実際の例を考えてみましょう:FacebookとOAuth2実装。完全なアクセストークンであるか、サーバー側のクレデンシャル取得用のアクセスコードであるか(それぞれ時間制限あり)、ブラウザからトークン(またはコード)を送信してKaazing Gatewayを使用してWebSocketへのアクセスを保護することができます。

私がKaazingのゲートウェイに取り組んだことの1つは、OAUth2は本当に何も保護していないということです。自由に任意の形式のアクセストークンを渡すことができます。信任状認証スキーム、access_tokenフォーマット、access_tokenの生存期間がすべて適切なポリシー決定であることを確認することをお勧めします。

Kaazing Gatewayを使用すると、任意のトークンをゲートウェイに送信し、検証するために書き込むJAASログインモジュールで検証できます。政権の安全は、あなたと政策決定次第である。

よろしく、ユーザー認証が必要な場合は良い解決策だが、私はそれがある場合のみクライアントを動作するかどうかはかなりよく分からない

スティーブン・アトキンソン

ゲートウェイサーバーの開発、 Kaazing

関連する問題