2011-01-08 8 views
3

新しいクライアントがWebサイトに接続したとき(認証なしで匿名ユーザーとして接続する場合)、新しいGUIDが発行されて保存されるように、長いポーリングサーバーが必要ですクライアントとサーバー間のポーリング時にこの接続を識別する署名付きのCookie内に格納します。長いポーリングサーバーの原則(クライアント認証)

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

答えて

2

一つ、私が想像できる:

  1. 発行セッションID、いずれかのASP.netのものを使用するか、余分なものを発行して、あなたは、ときにそれを無効にするためのASP.net認証にフックする必要があります必要 -
  2. 長いポーリングを行う場合は、Node.jsサーバーが受信するように、クッキーを送信してください。
  3. ASPとNode.jsの両方からアクセスできるDBにGUIDを保存します。

残念ながら、どのDBを使用することができますか、私は経験はありませんが、Node.js用の多くのラッパーがありますが、それらの多くは維持されていません。機能が完了していません。

Node.js wikiのdatabase listingをチェックしてみてください。それぞれについて見てみましょう.Googleで検索して、問題がないかどうか確認することを忘れないでください。

ああ、私の心に湧き別(DBless)ソリューション:

  1. はASP.netを経由して認証を行います
  2. のNode.jsは、認証クッキーを受信した場合、特別なASP.netページに転送し
  3. Node.jsにこのリクエストが有効かどうかを伝える(ローカルホストからのみアクセスできるようにすることもできます)
  4. リクエストが有効な場合のみ、ロングポーリングを開始します。

これは、同じサーバー上で実行されているときに、ほとんど遅れを導入しません。

+0

ありがとうございました。私は共有DBソリューションについても考えていました。 2番目の解決策は興味深いと思います。特に、現在認証されているユーザー識別子(ASP.NET User.Identity.Nameプロパティ)を返すことができるlocalhostページ。 – yojimbo87

2

私は現在、同じ問題に直面し、ここで私はするつもりです何であるのです。

私は私のWebクライアントにAPIを提供していますJavaでRESTサーバーを持っています。長いポーリングの場合、私は小さなnode.jsサーバーを作成しました。

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

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