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

时间:2018-05-18 08:24:43

标签: cryptography jwt

当我转到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解码轻松读取内容?

1 个答案:

答案 0 :(得分:1)

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