问题描述
也许这将是一个愚蠢的问题,但我对此感到好奇。我是React-js和node-js后端的新手。我将jwt令牌保存在Web浏览器本地存储中,并在react js前端中对该令牌进行解码。我的问题是在前端安全使用jwt解码方法,因为有人知道令牌也可以解码令牌吗?
解决方法
是的。
JWT背后的想法不是无法解码,实际上恰恰相反。它们设计用于分布式系统。相反,它们是安全的,因为它们只能使用密钥生成,而密钥只能在应用程序的服务器端使用。
JWT实际上包括三个部分-标头,有效载荷和签名-标头,有效载荷和秘密密钥被组合并散列以形成签名。
然后使用此签名来验证标头和有效负载是否未被修改。如果有,签名将不再匹配。
, JWT代码具有3个独立的部分,并用.
分隔
包含
HEADER:ALGORITHM & TOKEN TYPE
PAYLOAD:DATA
和一个VERIFY SIGNATURE
来确保您的令牌有效。
拥有令牌的所有人都可以提取公共部分
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
}
,
答案是肯定的,如果您有一些用户标识信息(例如userId),并且您认为该数据可以发送出去,那么您可以在前端对其进行解码。如果您要在令牌上存储一些敏感信息,则不会。 (这是一个不好的做法)。另请注意,有效载荷无法修改。即使修改签名,也不会验证令牌。因此,最佳做法是在有效负载中不要包含敏感数据。