移动应用中的套接字认证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动应用中的套接字认证相关的知识,希望对你有一定的参考价值。

我想知道如何使用套接字和cordova正确验证用户身份。

目前,发生以下情况:

  1. 用户使用普通的ajax命令注册或登录,发送emailpassword
  2. 我发回一个访问令牌和他们的电子邮件,这些邮件存储在电话上的localstorage中,并作为qisxswpoi存储在redis中
  3. 然后,用户向socket.io服务器发送连接请求,类似于(客户端):

email => accesstoken
  1. 然后我检查后端是否有访问令牌和电子邮件在我的redis服务器中,如果是,我开始监听客户端发送的任何命令(服务器端):

var socket = io('http://192.168.50.3:8080/');
socket.on('connect', function(){
    socket.emit('init', { email: 'email@email.com', token: '12ueno1' });
});
  1. 现在通过身份验证,用户可以发送命令,如(客户端):

var io = require('socket.io').listen(8080),
    mongoose = require('mongoose'),
    schema = mongoose.Schema,
    userModel = require('./models/user'),
    lobbyModel = require('./models/lobby'),
    redis = require('redis').createClient();

io.sockets.on('connection', function(socket){
    socket.on('init', function(data){
        // here, we check for an init command which will have an email and access token
        // if it's there, we put the user into a room and let them wait for data
        redis.get(data.email, function(err, reply){
            if(reply === data.token){

                // get into room
                var roomKey = data.email;
                socket.join(roomKey);

                // get user
                var user;
                userModel.findOne({ email: data.email }, function(err, doc){
                    user = doc;
                });

                socket.in(roomKey).on('create_lobby', function(data){
                    // do stuff for creating a lobby and then send back the data
                    io.sockets.in(roomKey).emit('created_lobby', {
                        email: user.email
                    });
                });
            }
        });
    });
});

现在,这很好用,我只是想知道我是否正确地采用它,或者我是否正在创建一个不安全的系统。

答案

相当晚,但我只是遇到了这个问题。

答案是这种方法不安全。

首先,令牌未被验证。

其次,没有超时检查。

以上是关于移动应用中的套接字认证的主要内容,如果未能解决你的问题,请参考以下文章

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

片段中的 super.onCreateView

无法移动到嵌套子导航组件中的父片段?

导航抽屉活动:在按钮单击时从片段移动到片段

套接字编程中的Java拖放问题

片段和活动之间的核心区别是啥?哪些代码可以写成片段?