我相信我在这里忽略了非常简单的东西,但我刚开始学习JWT令牌进行身份验证,据我所知,JWT令牌的结构是:
我理解的是,您将此发送给客户端,并在需要时允许客户端将其发送回服务器。此时,您使用私钥解密签名以确保未被篡改。
我困惑的部分是,为什么您需要易于转换回纯文本的
既然您将在服务器上对其进行解密,那么您不能只传递签名,使用秘密键解密它并读取有效负载吗?这似乎更安全,因为第一部分可以轻松地转换回纯文本,并向攻击者提供存储在有效负载中的信息,例如
我错过了什么吗?
Base64UrlEncode(Header) + '.' + Base64UrlEncode(Payload) + '.' + CreateSignature(Header, Payload, Secret_Key)
我理解的是,您将此发送给客户端,并在需要时允许客户端将其发送回服务器。此时,您使用私钥解密签名以确保未被篡改。
我困惑的部分是,为什么您需要易于转换回纯文本的
Base64UrlEncode(Header) + '.' + Base64UrlEncode(Payload) + '.'
的第一部分呢?既然您将在服务器上对其进行解密,那么您不能只传递签名,使用秘密键解密它并读取有效负载吗?这似乎更安全,因为第一部分可以轻松地转换回纯文本,并向攻击者提供存储在有效负载中的信息,例如
token expiration
、userId
等。我错过了什么吗?