我已经用express,Socket.io和基于令牌的jwt身份验证设置了一个测试服务器
我已经阅读了本教程https://auth0.com/blog/2014/01/15/auth-with-socket-io/
在服务器端,教程记录解码后的令牌
console.log(socket.handshake.decoded_token.email, 'connected');
但当我试图记录socket.handshake.decoded_token
时,变量未定义。Socket.Handshake
不包含任何带有已解码令牌的变量
所以。。。我试着用谷歌搜索如何解码令牌,找到了这个页面https://developers.google.com/wallet/digital/docs/jwtdecoder
我粘贴了公共令牌,脚本在没有jwtsecret的情况下解码了令牌!?嗯。。。然后我在想。。。如果脚本可以在没有秘密的情况下解码令牌,它怎么可能是安全的!?
作为身份验证返回给客户端的公共令牌
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwibmFtZSI6ImNsYXJrIiwiZW1haWwiOiJjbGFya0BlbGVjdHJvYmVhdC5kayIsImlhdCI6MTQwMzczMTkyMSwiZXhwIjoxNDAzNzM1NTIxfQ.mVFymk6gKBPmcVObB_3ydqbJTlcv4eVNYBcahsjg0g8
令牌没有加密,只是编码。
用您的秘密构建的签名是重要的位,并确保令牌没有被篡改。
这里有一篇像样的(简短的)文章,更详细地解释了这一点
这是关于你是否信任代币的发行方提供代币本身持有的权利要求。任何人都可以对它进行解码,也可以对完全相同的json有效负载进行编码,但是只有您可以根据您的秘密密钥来决定签名是否得到验证。
因此,在您将jwt秘密丢弃到某个地方的潜在破坏场景中,您应该能够更改秘密并基本上使所有使用该秘密发布的令牌无效。