WebSocket接続が使用されているときにユーザーを認証するための可能な方法は何ですか?
シナリオ例:暗号化されたWebSocket接続を介したWebベースのマルチユーザーチャットアプリケーション。このアプリケーションの各接続が特定の認証済みユーザーに属し、接続中に誤ったユーザーのなりすましによって悪用されないようにするには、どうすればよいですか(または保証できます)。
SSL/TLSは、X.509証明書を使用してクライアントとサーバーの両方を認証するために使用できます。使用しているWebアプリケーションプラットフォームによって異なります。 Apacheでは、SSL_CLIENT_CERT 環境変数 が有効であることがわかっている証明書のリストに対して有効かどうかを確認できます。これには、完全なPKIを使用する必要はなく、クライアントごとに証明書を購入する必要もありません。 CAを使用してサーバーのSSL証明書をバックアップすることをお勧めします。
アプリのWebSocket以外の部分の認証を既に行っている場合は、接続後の最初のメッセージとしてセッションCookieを渡し、通常どおりにCookieを確認します。
警告:フラッシュソケットを使用すると、次の機能が動作しないことが指摘されています:
socket.io を使用している場合は、さらに簡単です。Cookieは接続時に自動的に渡され、次のようにアクセスできます。
var io = require('socket.io');
var socket = io.listen(app);
socket.on('connection', function(client){
cookies = client.headers['cookie'];
});