JSON Web Token

发布时间 2023-10-11 08:44:27作者: emanlee

传统的Web应用中,使用session来存在用户的信息,每次用户认证通过以后,服务器需要创建一条记录 保存用户信息,通常是在内存中。
    随着认证通过的用户越来越多,服务器的在这里的开销就会越来越大。
    由于Session是在内存中的,这就带来一些扩展性的问题。
    当我们想要扩展我们的应用,让我们的数据被多个移动设备使用时,我们必须考虑跨资源共享问题。
    需要客户端(浏览器)中使用cookie存储session的ID值,但是移动端设备没有cookie。

 

 

JWT是是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。并且是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。

JWT就是token的一种具体实现方式,其全称是JSON Web Token

官网地址:https://jwt.io/

先来说一下基本的流程:
    跨域是一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域,要想跨域肯定要实现不同的端到端的通信。
    客户端使用用户名和密码进行登录
    服务端收到请求,验证客户端的用户名和密码
    验证成功后,服务端会签发一个类似于钥匙一样的私钥token,再把这个token返回给客户端
    客户端收到token后可以把它存储到cookie、session、redis等
    客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie、header中携带
    服务端接收到请求,然后验证客户端请求里面是否携带着token,如果验证成功,就向客户端返回请求数据

 

 1、前端也就是客户端,通过表单提交用户名和密码信息发送到后端(服务的)

2、后端(服务端)验证该用户的用户名和密码是否正确,验证通过通过代码规定生成相对应的token令牌,token令牌将包含用户的数据信息作为Payload,与JWT Header分别进行Base64编码拼接后签名,生产类似于zzz.sss.rrr的字符串

3、后端(服务端)将生成的token作为判断用户登录成功的依据

4、前端拿到后端发来的token令牌后存储起来,等下一次用户需要再次请求服务器时,该用户将携带token(未过期的)请求服务器端以获取数据

5、后端拦截该用户的请求,判断token是否过期,未过期则执行业务逻辑,返回用户需要的数据

6、后端拦截该用户的请求,判断token是否过期,token令牌过期则返回错误的登录信息,这是需要后端再次生成token令牌,此时又会回到步骤1。

注意,session和JWT的主要区别就是保存的位置,session是保存在服务端的,而JWT是保存在客户端的,JWT就是一个固定格式的字符串


3、结构

JWT固定各种的字符串,由三部分组成:

    Header,头部
    Payload,载荷
    Signature,签名

注意,把这三部分使用点(.)连接起来,就是一个JWT字符串

 
与传统的认证方式相比有哪些好处

    json的通用性非常好,JWT支持多种语言实现,如JAVA,JavaScript,JS,PHP等很多语言都可以使用。
    因为有了payload部分,可以携带非敏感信息。
    方便信息传递,jwt的组成简单,占用字节小。
    易于应用的扩展,不需要在服务端保存会话信息。

 

 

 


————————————————
链接:https://blog.csdn.net/zsr6135/article/details/122607814