Json Web 代币是否足够安全?以及如何保护有效载荷



当我转到 https://jwt.io 时,我看到这个编码的标记:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

如果我去 https://codebeautify.org/base64-decode,复制粘贴令牌值并推送Decode,我得到这个:

{"alg":"HS256","typ":"JWT"}{"sub":"1234567890","name":"John Doe","iat":1516239022}

如果我从HS256切换到RS256,我现在得到这个令牌:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.TCYt5XsITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUcX16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtjPAYuNzVBAh4vGHSrQyHUdBBPM

它也可以很容易地用base64解码。所以,我的问题是,这是否是预期的行为?如果是,使用不同算法(HS256、RS256 等)的原因是什么,如果我们使用什么算法,我们都可以仅使用 base64 解码轻松读取内容?

好吧,JWT 并不意味着保护它用于验证声明的内容,即当您使用 JWT 签署请求时,在解码它时,用户/系统必须拥有密钥。因此,要回答您的问题,是的,这是预期的行为,base 64 编码仅用于通过 URL 传输,而不是保护它。最后一点,如果我可以澄清声明的验证只是意味着您是你告诉系统您的身份/谁,并且签名的内容没有被稍微改变,对编码签名的任何部分的任何更改都将导致签名失败;因此,这种说法将不再是真实或真实的。要查看这一点,只需尝试在您的终端import jwt encoded=jwt.encode({'name':'some name'}, 'somesecretkey',algorithm='HS256') 中编码类似的东西
然后复制生成的令牌,然后在字符串中删除或添加单个字母,并尝试使用相同的密钥进行解码并观察它失败或在CodeBeautify再次尝试相同的操作

最新更新