[什么是JWT]
JSON网络令牌(JWT)是目前最流行的跨域认证解决方案。
JWT官方网站地址:https://jwt.io/
一般来说,JWT是一个可以代表用户身份的令牌。JWT令牌可用于在api接口中检查用户身份,以确认用户是否有权访问api。
JWT包含身份验证所需的参数和用户定义的参数。JWT可以使用秘密(HMAC算法)或RSA或ECDSA的公钥/私钥对进行签名。
【何时应该使用JSON Web令牌?】
授权:这是使用JWT最常见的方案。一旦用户登录,每个后续请求将包括JWT,允许用户访问令牌允许的路由、服务和资源。单点登录是JWT广泛使用的功能,因为它几乎没有开销,并且可以在不同的域中轻松使用。
信息交换:JSON Web token是各方之间安全传递信息的好方法。因为JWT可以签名——例如,使用公钥/私钥对——你可以确定发送者就是他们所说的那个人。此外,因为签名是使用标头和有效负载计算的,所以您还可以验证内容没有被篡改。
【JWT有什么优势?】
用户将用户名和密码发送到服务器。服务器验证后,保存当前会话中的相关数据,如用户角色、登录时间等。服务器向用户返回一个session_id,并写入用户的Cookie。用户的每个后续请求都会通过Cookie将session_id发送回服务器。一旦接收到session_id,服务器就会找到前一时期保存的数据,从而知道用户的身份。这个模型的问题是它不可伸缩。单台机器没有问题。如果是服务器集群或跨域面向服务的体系结构,则需要会话数据共享,并且每台服务器都可以读取会话。如果会话中存储的节点挂了,整个服务就会瘫痪,体验会比较差,风险会很高。
相比之下,JWT的实现是在客户端存储用户信息,而不是在服务器端。每个请求都会带来一个令牌来验证用户的登录状态,这样服务就会变成无状态,服务器集群也会很好地扩展。
[JWT令牌结构]
在紧凑的形式中,JSON网络令牌由三部分组成,用点(。),它们是:
报头报头有效载荷签名因此,JWT通常如下: