23

さまざまなWebベースのAPIを保護するためにOAuthプロバイダーを実装しています。最も頭痛の種は、OAuthを介してWebSocketを保護することです。

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

サーバーを備えたWebアプリケーションと比較して、ブラウザーにある場合のリスクは何ですか?

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

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

しかし、その時点で、accessTokenが必要かどうかを自問します。これは、origin-URIを唯一の安全なメカニズムとして使用できるためです。

4

2 に答える 2

9

はい、OAuth を使用して WebSocket 接続を保護できます。Kaazing WebSocket ゲートウェイには、さまざまな方法 (トークンベース、HTTP ベース、または Cookie ベース) を使用した認証と承認のための洗練されたアーキテクチャがあります。

さらに、信頼されていないクライアントを扱う可能性のある Web 上で安全な方法で行われます。(または、少なくとも、信頼できないクライアントを扱っていると常に想定する必要があります。)

クライアントが WebSocket 接続を試みると、ゲートウェイはリクエストを受け取ります。特定のサービス (つまり、URL) が保護されるように構成されている場合、クライアントはチャレンジされます。

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

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

接続されている場合、WebSocket 接続が開かれ、続行できます。そうでない場合、リクエストは拒否され、接続は閉じられます。

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

このアーキテクチャは強力です。選択したセキュリティ フレームワークに関係なく、独自のセキュリティ メカニズムを課すのではなく、Kaazing のゲートウェイがそれにプラグインするからです。また、OAUth や OAuth2 の場合は、トークンを理解したりデコードしたりする必要はありません。それを理解する必要があるのは、トークン プロバイダーだけです。ただし、トークン プロバイダーがセッションの期間を指定したい場合は、それをトークンと共に含めることができ、ゲートウェイはそれを尊重します。

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

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

高レベルの説明があるドキュメントのいくつかのセクションを次に示します。

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

于 2012-04-27T08:31:11.670 に答える
3

資格情報の付与は、アクセス トークンを渡す前に実行される認証と同じくらい安全です。それは彼らが言う仕様の範囲外です。したがって、それは、資格情報の付与に応じてトークンを発行する前に、どのような認証方式を採用するかによって異なります。

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

OAuth2 仕様の下では、部分の MAC ダイジェスト、部分の暗号化、またはそのトークン内のデータの保護を自由に行うことができます。ブラウザーのアクセス トークンのセキュリティは、含まれる情報によって異なります。多くの場合、最小限の情報 (ユーザー ID、有効期限、バージョン、ダイジェスト) を含むように設計し、サーバーによって自己検証できるようにします (したがって、ダイジェスト)。 . トークンの内容は事実上任意です。システムによっては、トークンのプロキシとしてアクセス「コード」を発行することさえあります。

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

Kaazing のゲートウェイを使って作業してわかったことの 1 つは、OAUth2 は実際には何も保護しないということです。任意の形式のアクセス トークンを自由に配布できます。クレデンシャル認証スキーム、access_token 形式、および access_token の有効期間がすべて適切なポリシー決定であることを確認することをお勧めします。そうすれば、セキュリティが得られます。

Kaazing Gateway を使用すると、任意のトークンを Gateway に送信し、それらを検証するために作成した JAAS ログイン モジュールで検証できます。体制の安全は、あなたと政策決定次第です。

よろしく、

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

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

于 2012-04-27T21:27:01.097 に答える