2016-04-28 96 views
0

可以說,我創建令牌像這樣:JWT編碼如何實現安全性?

def create_token(userId): 
    payload = { 
     # subject 
     'sub': userId, 
     #issued at 
     'iat': datetime.utcnow(), 
     #expiry 
     'exp': datetime.utcnow() + timedelta(days=1) 
    } 

    token = jwt.encode(payload, SECRET_KEY, algorithm='HS256') 
    return token.decode('unicode_escape') 

節點socket.io

io.sockets 
    .on('connection', socketioJwt.authorize({ 
     secret: 'SOME SECRET', 
     timeout: 15000 
    })) 
    .on('authenticated', function(socket) { 
     console.log('hello! ', socket.decoded_token); 

     socket.on('message', function(message) { 
      console.log(message); 
      io.emit('message', message); 
     }); 
    }) 
    .on('error', function(error) { 
     console.log(error.type); 
     console.log(error.code); 
    }); 

現在,我將使用用戶ID,以確定誰發送一次身份驗證的郵件用戶。這種識別哪些用戶發送消息的方法有多安全?如何僞造令牌並冒充用戶?只知道密鑰?有什麼方法可以用來破解這種安全形式?我如何確保選擇的安全方法是安全的?

回答

3

一個JWT具有這樣 XXXX是信頭信息 YYYYY是有效載荷 ZZZZZ與您的安全密鑰的有效載荷的哈希格式XXXXX.YYYYY.ZZZZZ。

由於JWT只有Base64編碼,任何人都可以解碼JWT並查看有效載荷。但是,如果它們更改了值,則有效負載將不會散列到與ZZZZZ相同的值,因此令牌將變爲無效。這種方法使得令牌免於篡改(只要沒有其他人擁有用於簽署令牌的安全密鑰)。但是,由於任何人都可以讀取令牌,因此任何不應該可查看的敏感數據都不應該包含在有效負載中,或者是加密的。

要僞造令牌或篡改令牌並更改用戶ID,黑客需要您的安全密鑰。