在 React JS 中使用 jwt 解码来解码令牌是否安全?

Is that safe use jwt decode to decode token in react js?

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

是的,是的。

JWT 背后的想法并不是它们不能被解码,事实上恰恰相反。它们专为在分布式系统中使用而设计。相反,它们是安全的,因为它们只能使用密钥生成,而密钥只能在您的应用程序的 server-side 上可用。

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

此签名随后用于验证 headers 和有效负载未被修改。如果有,签名将不再匹配。

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

HEADER:ALGORITHM & TOKEN TYPE

PAYLOAD:DATA

和一个 VERIFY SIGNATURE 来保证你的令牌是否有效。

public部分有token的人都可以提取

JWT decode 只查找 public 部分,因此在您的 front-end 代码中这样做是完全安全的。

一个例子:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

>> after decode
HEADER:ALGORITHM & TOKEN TYPE
{
  "alg": "HS256",
  "typ": "JWT"
}
PAYLOAD:DATA

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

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