我一直在阅读有关JWT的信息,并且我知道它分为三个部分,即header
,payload
和signature
。
我将哈希算法保留在标头中,将基本信息保留在有效载荷中,例如。有效负载中的名称,年龄,角色,有效期等,然后将两者都进行base64编码,然后使用 标头中指定的算法以获得JWT
username
和password
登录。secret key
。问题:
secret key
?答案 0 :(得分:1)
接收JWT的服务器是验证令牌的服务器。如果有人修改了令牌,则验证将失败并且访问将被拒绝,因为(希望如此)服务器外部没有人知道该机密,因此无法创建有效的令牌。如果客户知道秘密,尤其是。在浏览器/ js环境中,并使用对称对称算法,这会带来很大的安全风险,有人可以窃取秘密并使用有效签名创建新令牌。
答案 1 :(得分:0)
任何承载令牌都只能在HTTPS
上使用。保护TLS
连接的HTTPS
具有内置的完整性检查,以防止在传输过程中进行修改。
因此,不需要在客户端验证令牌。
另外,最好将JWT令牌视为一些不透明的字符串。这样,发行服务器就可以加密其内容,而不会破坏您的应用程序。
正如其他人指出的那样,客户端永远不应拥有签名密钥,因为客户端永远不会被信任。
现在,如果使用不对称密钥对令牌进行签名,则可以下载公钥并验证令牌,而不会影响系统的安全性。那里有JavaScript库可以做到这一点,但是没有理由您应该这样做。