提问者:小点点

解码jwt令牌-它安全吗?


我已经用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

共2个答案

匿名用户

令牌没有加密,只是编码。

用您的秘密构建的签名是重要的位,并确保令牌没有被篡改。

这里有一篇像样的(简短的)文章,更详细地解释了这一点

匿名用户

这是关于你是否信任代币的发行方提供代币本身持有的权利要求。任何人都可以对它进行解码,也可以对完全相同的json有效负载进行编码,但是只有您可以根据您的秘密密钥来决定签名是否得到验证。

因此,在您将jwt秘密丢弃到某个地方的潜在破坏场景中,您应该能够更改秘密并基本上使所有使用该秘密发布的令牌无效。