2016-12-27 79 views
1

我們正在建立一個web服務器和PC客戶端的web服務。客戶端程序連接到Web服務器並通過websocket發送一些數據..客戶端沒有用戶交互,沒有密碼或登錄...它只是發送一些與客戶賬戶相關的數據...智威湯遜,websockets和通過網絡的客戶端服務器

我們'我們應該關注的是我們應該使用JWT來防止客戶端程序或者劫持流量......或者?

我們讀過的所有文章是關於瀏覽器<> Web服務器而不是程序<> Web服務器....

感謝您的想法!

+0

要驗證消息的真實性,請驗證JWT簽名 - 這是它的目的(簽名)。如果中間的人能夠生成有效的簽名,那就意味着簽名密鑰被泄露 - 這種情況應該不太可能發生,因爲假設簽名密鑰不是你泄漏出來的東西。因此,如果簽名沒有問題,智威湯遜來自正確的渠道並且沒有被篡改。您可以使用對稱密鑰或私鑰對令牌進行簽名。將您的公鑰分發給其他應用程序以驗證簽名。 –

+0

JWT應在驗證證明後發出。如果你沒有識別方法,那麼你的問題是以前的,你將如何識別你的PC客戶端? – pedrofb

回答

0

這是正確的,爲避免其他客戶向您的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')); 
    } 
});