【问题标题】:decode jwt token - is it secure?解码 jwt 令牌 - 它安全吗?
【发布时间】:2014-08-16 15:22:07
【问题描述】:

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

【问题讨论】:

    标签: node.js socket.io jwt


    【解决方案1】:

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

    使用您的秘密构建的签名是重要的部分,可确保令牌未被篡改。

    这是一个体面的(和简短的)writeup that explains that in a bit more detail

    【讨论】:

    • ok :) 如果令牌只被编码,为什么还要在其中放入任何人都可以解码的用户变量?
    • 一般(基本)建议是 1. 不要将敏感数据放入令牌中。 2.不要以明确的方式通过它们。 3. 在标题或正文中传递它们(而不是在 url 上)。 JWT 基本上只是一组声明的容器格式。当签名存在并经过验证时,您可以信任这些声明。这个主题比这个更深入,我强烈建议您花一些时间研究与此相关的各种 RFC(JWT、JWS、OAuth JWT 不记名令牌等),并研究与该主题相关的安全性讨论。
    【解决方案2】:

    这是关于天气你信任令牌的发行者提供由令牌自己持有的索赔。任何人都可以对其进行解码,也可以对完全相同的 json 有效负载进行编码,但只有您可以根据您的密钥天气签名是否得到验证来决定。

    因此,在您将 jwt 秘密丢弃在某处的潜在违规情况下,您应该能够更改秘密并基本上使所有具有该秘密的已发行令牌无效。

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2021-12-30
      • 2018-10-05
      • 2018-05-18
      • 2019-05-19
      • 2016-07-20
      • 1970-01-01
      • 2018-08-14
      • 2020-05-23
      相关资源
      最近更新 更多