使用nodejs创建加入用户验证的websocket服务

使用nodejs创建websocket服务是非常简单的(”ws”模块等),网上教程也很多。websocket服务默认没有连接验证,再加上它支持跨域连接,这样就存在“盗连”和并发攻击的风险。

nodejs的”ws”模块提供了一个verifyClient回调方法,可以在客户端连接时,获取到连接信息如url等。这样我们就可以在连接url中加入自己的验证信息(用户名、密码等)。直接上代码:

************************************************************

后端:MyWs.js

 

 

var util = require('util');

var url = require('url');

var server = require('ws').Server;

var wss = new server({ port: 8181,verifyClient: ClientVerify });

 

wss.on('connection', function (ws){

   console.log('client connected');

 

   ws.on('message', function (message) {

        ws.send("message received!");

   });

 

   ws.on('close', function (close) {

        console.log("client closed");

   });

});

 

 

//验证函数

function ClientVerify(info) {

   var ret = false;//拒绝

   var params = url.parse(info.req.url, true).query;

 

   if (params["id"] == "luoc83" &¶ms["key"] == "123456") {

        ret = true;//通过

   }

 

   return ret;  

}

 

************************************************************

前端:MyWs.htm

 

   

测试

 

************************************************************

测试步骤:

1)启动后端服务:node MyWs.js

2)在浏览器打开MyWs.htm,点击“测试按钮”,弹出提示: "connect error!" 和 “close”

按“F12”可以看到提示信息:

WebSocket connection to'ws://localhost:8181/?id=luoc831&key=123456' failed: HTTP Authenticationfailed; no valid credentials available

描述得很清楚:验证失败

3)修改MyWs.htm中 varpsw="12345" 为 var psw="123456",保存,在浏览器打开,点击“测试按钮”,弹出提示"connect success",说明验证成功。

你可能感兴趣的:(nodejs,websocket)