我正在使用JWT来生产和消费令牌.经过几周阅读规格和谷歌搜索,我仍然不明白:如果我可以在一台机器上生产它然后在另一台机器上打开它,那么令牌是什么?书面标记是否应该以某种方式加密?我正在使用System.IdentityModel.Tokens
和创建令牌使用JwtSecurityToken
和JwtSecurityTokenHandler
.
有人可以请我指一个关于主题的重点文档,主要解释它的安全方面吗?
JWT的前两个段未加密,因此任何在服务器上生成JWT并将其发送回客户端的应用程序都应通过SSL进行加密.这通常作为对登录请求的响应发送给用户,该请求应该通过SSL发送,因为它通常包含用户名和密码组合.发送到服务器的后续请求也应该通过SSL完成,因为无论您使用什么类型的令牌 - 无论是JWT还是其他 - 它都不应以未加密的形式显示到数据包嗅探,否则用户会话可能被劫持.
JWT的安全方面来自第三和最后一段.它是通过使用只有服务器知道的密钥对前两个段进行签名来生成的.当服务器生成的JWT作为经过身份验证的请求的一部分发送回该服务器时,服务器知道密钥,因此可以验证第三个段中的签名并使用该签名来确保前两个段未被修改由服务器签名.