JWT、WebSocket和客户端服务器通过web
我们正在用web服务器和PC客户端构建一个web服务。客户端程序连接到web服务器并通过WebSocket发送一些数据。。客户端中没有用户交互,没有密码或登录。。。它只是发送一些与客户帐户相关的数据 我们关心的是,我们是否应该使用JWT来防止客户端程序或流量劫持 我们读过的所有文章都是关于浏览器web服务器的,但不是关于程序web服务器的JWT、WebSocket和客户端服务器通过web,websocket,jwt,Websocket,Jwt,我们正在用web服务器和PC客户端构建一个web服务。客户端程序连接到web服务器并通过WebSocket发送一些数据。。客户端中没有用户交互,没有密码或登录。。。它只是发送一些与客户帐户相关的数据 我们关心的是,我们是否应该使用JWT来防止客户端程序或流量劫持 我们读过的所有文章都是关于浏览器web服务器的,但不是关于程序web服务器的 谢谢你的任何想法 没错,为了避免其他客户端向您的websocket服务器发出请求,您可以使用JWT。你没有提到你在使用什么技术。下面是一个使用express和
谢谢你的任何想法 没错,为了避免其他客户端向您的websocket服务器发出请求,您可以使用JWT。你没有提到你在使用什么技术。下面是一个使用express和socket.io的示例
1) 客户端在查询参数上发送jwt。
2) 服务器验证jwt的签名。
import express from "express";
import socket from "socket.io";
import http from 'http';
const server = http.createServer(app);
const io = socket(server);
io.use( async (socket, next) => {
if(!socket.handshake.query)
next(new Error('Not Authenticated'));
const token = socket.handshake.query.token;
const encUsrId = socket.handshake.query.pcClientToken; //maybe
try{
let hasErrors;
if(token)
hasErrors = await jwt.validateJSON(token); //validate with your own function.
next();
}
catch(ex){
next(new Error('Not a valid JWT'));
}
});
为了验证消息的真实性,您需要验证JWT签名——这就是它的目的(签名的目的)。如果中间的人能够产生一个有效的签名,那意味着签名密钥泄露了——这种情况应该是不太可能发生的,因为假设签名密钥不是泄露出来的东西。因此,如果签名没有问题,JWT来自正确的来源,并且没有被篡改。您可以使用对称密钥或私钥对令牌进行签名。将您的公钥分发给其他应用程序以验证签名。应在身份验证证明后颁发JWT。如果您没有识别方法,那么您的问题是先前的,您将如何识别您的PC客户端?