【问题标题】:Is that safe use jwt decode to decode token in react js?使用 jwt decode 来解码 react js 中的令牌是否安全?
【发布时间】:2020-12-11 13:04:33
【问题描述】:

这可能是个愚蠢的问题,但我/对此很好奇。我是 React-js 和 node-js 后端的新手。我将 jwt 令牌保存在 Web 浏览器本地存储中,并在 react js 前端解码该令牌。我的问题是在前端安全使用 jwt 解码方法,因为如果有人知道令牌也可以解码令牌?

【问题讨论】:

  • 您使用了正确的词:decode,但您似乎将其理解为好像它意味着 decrypt。 JWT 有效负载通常不加密,它只是 base64url 编码。但是,如果您无法确认签名有效,那么信任来自 JWT 的信息是否安全?

标签: node.js reactjs jwt token


【解决方案1】:

答案是肯定的和否定的,如果你有一些用户识别信息(比如 userId)并且你可以接受这些数据,那么你可以在前端对其进行解码。如果您要在令牌上存储一些敏感信息,那么不会。 (这是一种不好的做法)。另请注意,无法修改有效负载。即使修改了签名也不会验证令牌。所以最好的做法是不要在有效负载中包含敏感数据。

【讨论】:

    【解决方案2】:

    JWT 代码有 3 个单独的部分,用 . 分隔 公共部分包含

    HEADER:ALGORITHM & TOKEN TYPE
    
    PAYLOAD:DATA
    

    和一个VERIFY SIGNATURE 保证您的令牌有效与否。

    所有持有token的人都可以提取公开部分

    JWT decode 只查找公共部分,因此在您的前端代码中这样做是完全安全的。

    一个例子:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    
    >> after decode
    HEADER:ALGORITHM & TOKEN TYPE
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    PAYLOAD:DATA
    
    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
    

    【讨论】:

      【解决方案3】:

      是的。

      JWT 背后的理念并不是它们不能被解码,事实上恰恰相反。它们被设计用于分布式系统。相反,它们是安全的,因为它们只能使用密钥生成,而该密钥应该只在应用程序的服务器端可用。

      JWT 实际上包含三个部分 - 标头、有效负载和签名 - 标头、有效负载和密钥被组合并散列以形成签名。

      然后使用此签名来验证标头和有效负载是否未被修改。如果有,签名将不再匹配。

      【讨论】:

      • 综上所述,为了确保您的设置“安全”,请勿在客户端的令牌和/或签名上存储任何敏感数据。
      猜你喜欢
      • 1970-01-01
      • 2014-08-16
      • 2019-05-19
      • 1970-01-01
      • 2019-02-25
      • 2018-11-12
      • 2019-02-06
      • 2018-05-18
      • 1970-01-01
      相关资源
      最近更新 更多