3

正常に動作する長いポーリング サーバーがあるとします。新しいクライアントが Web サイトに接続すると (認証なしで匿名として接続するだけです)、新しい GUID が発行され、署名付き Cookie に保存されます。クライアントとサーバー。

ここで、クライアントはログインして、認証されたユーザーとして続行したいと考えています。問題は、ロング ポール サーバー (node.js) と Web フレームワーク (ASP.NET) がスタンドアロン システムとして動作していることです。ASP.NET (MVC) 固有の認証メカニズムを使用して、Web フレームワークの観点からログインできますが、これは長いポーリング サーバー (私はまだ GUID 担当者として知られています) には影響しません。ロングポールサーバーの観点からユーザーを安全に認証するにはどうすればよいですか? このシナリオの「ベスト プラクティス」はありますか? 認証されたクライアントは、認証手順の後、一意のキー (GUID の代わりにメール アドレスとしましょう) によってさらに識別される必要があります。

4

2 に答える 2

2

私は現在同じ問題に直面しており、ここで私がやろうとしていることは次のとおりです。

Web クライアントに API を提供する Java の REST サーバーがあります。長いポーリングのために、小さな node.js サーバーを作成しました。

  1. クライアントは、(HTTPS 経由で) ユーザー名/パスワードを送信する node.js に接続します。セッション トークンを渡すこともできます。
  2. node.js は REST サーバーを呼び出して、指定された資格情報でユーザーを認証します
  3. ユーザーが認証されている場合、node.js は待機するか、それ以外の場合は 401 を送信します

利点は、node.js サーバーが DB 構造について何も知る必要がなく、SQL 呼び出しを含める必要がないことです。これにより、必要に応じて Python ツイストでサーバーを書き換えることもできます。

于 2011-02-01T08:18:50.813 に答える
2

私が想像できる1つの薄い:

  1. セッション ID を発行します。ASP.net のものを使用するか、追加の ID を発行します。必要に応じて、ASP.net 認証にフックして無効にする必要がある場合があります。
  2. ロング ポーリングを実行する場合は、Node.js サーバーが受信できるように、Cookie を送信するようにしてください。
  3. ASP と Node.js の両方からアクセスできる DB に GUID を保存します。

どのDBを使用できるかについては、私には経験がありません.

Node.js wiki のデータベース リストをチェックアウトして、それぞれを確認する必要があります。それを使用する前に、Google で検索し、大きな問題がないかどうかを確認することを忘れないでください。

ああ、別の(DBless)ソリューションが頭に浮かびました:

  1. ASP.net 経由で認証を行う
  2. Node.js が認証 Cookie を受信すると、それらを特別な ASP.net ページ (localhost からのみアクセスできるようにすることができます) に転送します。このページは、この要求が有効かどうかを Node.js に伝えるだけです (Node.js にユーザー データを与えることもできます)。 )
  3. リクエストが有効な場合のみ、ロングポーリングを開始します

これは、同じサーバー上で行われる場合、ラグをほとんど発生させません。

于 2011-01-09T10:11:23.633 に答える