最近根据项目的需要了解了JWT跨域登录认证,特此总结分享一下。
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文将分为两个部分,第一部分讲解JWT的原理和具体创建细节,帮助大家理解JWT的具体结构,和实现细节。第二部分是从SpringBoot项目中具体使用JWT的代码开始讲解,包括了登录创建Token,后续请求验证Token,设置有效期等等。
本文大纲:
1.跨域认证的问题
2.什么是JWT
3Java项目中生成JWT细节
4.JWT的使用
5.JWT的几个特点
==========================================开始分割线===============================================
1、跨域认证的问题
互联网服务离不开用户认证。一般流程是下面这样:
1、用户向服务器发送用户名和密码发起登录。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
这种模式的问题在于,扩展性不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。
举例来说,A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现?
一种解决方案是 session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表。
2、什么是JWT
JWT