首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在javascript中通过websocket验证每个请求?

如何在javascript中通过websocket验证每个请求?
EN

Stack Overflow用户
提问于 2016-07-28 07:42:01
回答 1查看 1.2K关注 0票数 0

我已经设置了一个javascript服务器,并为它配置了websocket。在客户端使用react和npm。因此,我希望使用rest API验证每个对web套接字的请求。身份验证将是第一步,然后在身份验证完成后,所有信息传输都将使用相同的web套接字进行。是否可以将用于身份验证的标头传递给websocket?有谁能告诉我该怎么做吗?

下面是我正在试验的服务器和客户端的代码。

服务器代码-

代码语言:javascript
运行
AI代码解释
复制
#!/usr/bin/env node
var WebSocketServer = require('websocket').server;
var http = require('http');

var server = http.createServer(function(request, response) {
        console.log((new Date()) + ' Received request for ' + request.url);
        response.writeHead(404);
        response.end();
});

server.listen(5005, function() {
    console.log((new Date()) + ' Server is listening on port 5005');
});


wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});

function originIsAllowed(origin) {
  return true;
}

wsServer.on('request', function(request) {
    if (!originIsAllowed(request.origin)) {
        request.reject();
          console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
    return;
    }

    console.log(" ################ Authorization ##################");   
    var auth = request.headers['authorization']; 
        if(!auth) {     
                response.statusCode = 401;
                response.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"');
        console.log(" Authorization failed !!! ");
                response.end('<html><body>Need some creds son</body></html>');
        }
    else if(auth) { 
                var tmp = auth.split(' ');
                var buf = new Buffer(tmp[1], 'base64'); 
                var plain_auth = buf.toString();        

                console.log("Decoded Authorization :", plain_auth);

                var creds = plain_auth.split(':'); 
                var username = creds[0];
                var password = creds[1];

                if((username == 'hack') && (password == 'thegibson')) {   
                    console.log(" Login successful !!!");
                }
                else {
            console.log("Login failed !!");
                }
        }  


    var connection = request.accept('echo-protocol', request.origin);

    console.log((new Date()) + ' Connection accepted.');
    connection.on('message', function(message) {
       //send message 
    });
    connection.on('close', function(reasonCode, description) {
    console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
    });
});

客户端代码-

代码语言:javascript
运行
AI代码解释
复制
import React from 'react'
var client = null;
export default React.createClass({
  getInitialState: function() {
     return { val : [],
                  username : 'hacker',
          password : 'thegibson' };
  },

   componentWillMount: function() {
    //client = new WebSocket('ws://localhost:8000/','echo-protocol');

    client = new WebSocket('ws://'+this.state.username+':'+this.state.password+'@localhost:5005/','echo-protocol');
        client.onerror = function() {
             console.log('Connection Error');
           };

        client.onopen = function() {
            function sendData(){        
                var details=[{"name" : "Ravi", "age" : 15, "occupation": "Student" }];              
                if (client.readyState === client.OPEN) {                
                    client.send(details.toString());
                    console.log(details);   
                    setTimeout(sendData,2000);  
                }
                }
            sendData();
             };

        client.onmessage = function(e) {
            this.setState({
                    val: e.data
            });
            }.bind(this);

    },

    componentWillUnmount: function(){
        client.close();
    },

    render: function() {
            return (React.createElement("div",null,
                    React.createElement("ul",null,
                         React.createElement("li",null,this.state.val.name," ( ", this.state.val.age,"  ) -  ","  Occupation  :", this.state.val.occupation)
                )               
            ))
        }
     });
EN

回答 1

Stack Overflow用户

发布于 2016-07-28 07:45:37

如果你想加密你发送的数据,也许你可以使用jwt或jwe。这里有很多你可以使用的库和完整的文档:https://jwt.io/

因此您可以通过post或标头发送所有信息,并在每个HTTP或websocket调用中检查它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38630024

复制
相关文章
[Silverlight动画]转向行为 - 路径跟随
路径跟随这名字一听就知道要干嘛了:机车会沿着一个预定的路线行驶。虽然在地图或者游戏中,路径是以图形的形式被表示的,而在转向行为中,其不过是一系列航点。 其策略真是简单到不行。只要从第一个航点开始挨个寻找下去即可。 private int _pathIndex = 0; private double _pathThreshold = 20; public void followPath(List<Vector2D> path,bool loop) {
用户1172164
2018/01/16
9820
Java 查找 List 中的最大值、最小值Java 查找 List 中的最大值、最小值
Java 查找 List 中的最大值、最小值 java> List<Long> list = new ArrayList(); java.util.List<java.lang.Long> list = [] java> list.add(1L) java.lang.Boolean res1 = true java> list.add(2L) java.lang.Boolean res2 = true java> Collections.max(list) java.lang.Long res3 = 2 j
一个会写诗的程序员
2018/08/17
3.9K0
Excel公式技巧54: 在多个工作表中查找最大值/最小值
要在Excel工作表中获取最大值或最小值,我们马上就会想到使用MAX/MIN函数。例如,下图1所示的工作表,使用公式:
fanjy
2020/09/17
11.9K0
Excel公式技巧54: 在多个工作表中查找最大值/最小值
较快速在一个数组中查找最大值和最小值
#include<stdio.h> #define MAX 100001 int a[MAX]; int n; /* 时间复杂度为3*n/2 */ void swap(int i) { if(i==n-1) return ; if(a[i]>a[i+1]) { int temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } void sort() { int i; for(i=0;i<n;i++) { swap(i); i++; }
chain
2018/08/02
3.7K0
多个必经边的最短路径
问题: 多个必经边、必经点的约束 S 到 E 的最短加权路径: [0, 2, 4, 5, 6, 7, 8, 14, 13, 12, 16, 17] S 到 E 的最短加权路径长度: 13
裴来凡
2022/05/29
3370
多个必经边的最短路径
ArangoDB Restful API
ArangoDB 除了提供 Web 和 shell 接口来管理数据库之外,还可以使用 Restful API 的方式来管理数据库。
kongxx
2020/02/18
1.1K0
【详解】图数据库 | 灵活存储复杂关联关系
从事10年JAVA研发工作,架构经验丰富,目前担任京东物流逆向创新业务团队leader,负责京东国际化逆向物流相关研发工作。
京东技术
2018/07/30
4.2K0
【详解】图数据库 | 灵活存储复杂关联关系
ArangoDB安装
ArangoDB的安装还是挺简单的,官方给了各个平台的安装包,下面是在CentOS8上面安装的步骤。
kongxx
2020/02/18
9160
较快速在一个数组中查找最大值和最小值(2)
/*分治法*/ #include<iostream> #include<string> #include<vector> #include<fstream> using namespace std; int a[16]={1,3,5,7,9,11,14,2,4,6,8,10,12,14,16,18}; int b[9]={3,1,5,9,4,2,7,6,10}; int t[2]; vector<string> splitEx(const string& src, string separate_chara
chain
2018/08/02
2.6K0
路径查找器AI
问题源于我想建立一个游戏AI,它要能够定义一条从起点到终点的路径,同时避开路上的墙壁障碍物。为此,我写了一个C#库(path.dll),它允许定义一个二维空间(MAXX,MAXY),并为这个空间设立一些矩形的“墙“。在添加完所有的墙后,path类将计算能够绕过墙的AI所有“可见”的AI节点(可见指节点之间没有墙)之间是连接的。这个类实现了一个路径查找算法,使用C#的Delegates(委托)与AI节点实例进行通信。最后,使用这个O_O算法(扩展欧几里得算法)将会得到一个子类,它是所节点的下一个目的AI节点的集合。在示例图中,可以看到墙(橙色),AI NODES(红色),起点(蓝色)和终点(蓝色)。
东心木水
2018/01/29
1.4K0
路径查找器AI
在Python中实现线性查找
线性查找算法是最简单的查找算法之一。线性查找算法的输入是一个数组或列表和项,该算法查找数组中是否存在该项。如果找到该项,则返回其索引;否则,可以返回null或你认为在数组中不存在的任何其他值。
fanjy
2022/11/16
3.2K0
在Python中实现线性查找
ArangoDB集合操作
通常我们可以通过 ArangoDB 提供的 Web 接口来对 ArangoDB 进行监控和管理。但今天来看看怎样通过 arangosh 的方式来对数据库进行操作。
kongxx
2020/02/18
1K0
ArangoDB文档操作
通过ArangoDB提供的shell终端,我们可以执行很多文档集合操作,下面就看看一些常用的方法。
kongxx
2020/02/18
9060
经典算法题-矩阵中查找单词路径数
1.问题描述 Problem Statement 问题陈述 You are given a String[] grid representing a rectangular grid of letters. You are also given a String find, a word you are to find within the grid. The starting point may be anywhere in the grid. The path may move up, down, l
cwl_java
2020/03/19
1.1K0
关于在vim中的查找和替换
在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。
休辞醉倒
2019/07/25
26.1K0
禁止点或禁止边的最短路径
问题: 禁止点或禁止边的约束 S 到 E 的最短加权路径: [0, 3, 6, 12, 16, 17] S 到 E 的最短加权路径长度: 7
裴来凡
2022/05/29
1K0
禁止点或禁止边的最短路径
使用Visual Studio 部署SharePoint时提示“路径中具有非法字符”
在使用VS 2012部署或发布SharePoint时,提示“路径中具有非法字符”(英文提示“Illegal characters in path”),找了半天,才找到答案。
雪雁-心莱科技
2018/12/27
1.9K0
【剑指offer:在排序数组中查找数字】搜索左右边界:从两边向中间、二分查找
二分查找一般用来查找数字在有序数组中是否出现过。进一步想,它可以用来不断在子序列中搜索对应数字。所以,我们就可以用它来向左边子序列中不断搜索,确认左边界;同样的思路,确认右边界。
心谭博客
2020/04/21
1.5K0
Mysql.ini 路径查找
Windows环境经常在常规路径下找不到Mysql.ini的配置文件,实在是很恶心。我们需要通过一下步骤来查找。
收心
2022/01/14
3.3K0
Mysql.ini 路径查找
TextBind:在开放世界中多轮交织的多模态指令跟随
拥有指令跟随能力的大型语言模型已经彻底改变了人工智能领域。这些模型通过其自然语言界面展现出卓越的通用性,能够应对各种现实世界任务。
zenRRan
2023/09/21
4160
TextBind:在开放世界中多轮交织的多模态指令跟随

相似问题

ArangoDb得到具有性质的边

11

Arangodb查找条件最短路径

132

在ArangoDB中查找具有非唯一属性的文档

23

ArangoDB-重复边

22

如何在路径中查找边

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文