這是正確的,爲避免其他客戶向您的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應在驗證證明後發出。如果你沒有識別方法,那麼你的問題是以前的,你將如何識別你的PC客戶端? – pedrofb