使用 jwt decode 来解码 react js 中的令牌是不是安全?
Posted
技术标签:
【中文标题】使用 jwt decode 来解码 react js 中的令牌是不是安全?【英文标题】: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 的信息是否安全?
【参考方案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 实际上包含三个部分 - 标头、有效负载和签名 - 标头、有效负载和密钥被组合并散列以形成签名。
然后使用此签名来验证标头和有效负载是否未被修改。如果有,签名将不再匹配。
【讨论】:
综上所述,为了确保您的设置“安全”,请勿在客户端的令牌和/或签名上存储任何敏感数据。以上是关于使用 jwt decode 来解码 react js 中的令牌是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章