移动应用中的套接字认证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动应用中的套接字认证相关的知识,希望对你有一定的参考价值。
我想知道如何使用套接字和cordova正确验证用户身份。
目前,发生以下情况:
- 用户使用普通的ajax命令注册或登录,发送
email
和password
- 我发回一个访问令牌和他们的电子邮件,这些邮件存储在电话上的
localstorage
中,并作为qisxswpoi存储在redis中 - 然后,用户向socket.io服务器发送连接请求,类似于(客户端):
email => accesstoken
- 然后我检查后端是否有访问令牌和电子邮件在我的redis服务器中,如果是,我开始监听客户端发送的任何命令(服务器端):
var socket = io('http://192.168.50.3:8080/');
socket.on('connect', function(){
socket.emit('init', { email: 'email@email.com', token: '12ueno1' });
});
- 现在通过身份验证,用户可以发送命令,如(客户端):
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(代码片段