JWT的原理
本文来自youtube视频 的笔记,链接给到https://www.youtube.com/watch?v=7Q17ubqLfaM
一.什么是JWT
例如 你有一个会话id,这个会话id 再浏览器的cookie中
然后每次客户端向服务器端发送器请求的时候,就会将该会话ID发送到服务器,之后服务器检查内存说“没问题”,然后去寻找拥有该会话id 的用户,找到之后然后执行授权,以保证用户有权访问
但是JWT实际上使用的是Json网络令牌,而不是使用这些cookie(Jwt是代表进行授权的方法)
在cookie和jwt的对比中 将更有利于你们理解jwt
传统的cookie
而 JWT
在开始的时候这两者的工作方式原理非常相似
但是
这一步的时候 并不是将信息存储在会话内存的服务器中,而服务器干的事情 是为此用户提交的一些凭证(密码 id 等登)创建了一个json web 令牌(jwt),并对其进行编码,用用户的私钥进行加密
客户端会用自己的私钥对其进行签名,以便让服务器知道,所以 如果你篡改它,那么它就无效了 因为客户端是用自己的私钥进行签名了的
服务器会使用该json网站令牌,并将其发送给浏览器,并注意到主要区别就是 服务器没有存储任何内容 (在服务器上实际上什么也没发生)
这个jwt拥有关于用户内置在其中,以便他将jwt发送回浏览器,浏览器可以选择去存储它
之后服务端将会向客户端发送一个请求 ,而这个时候服务端发送请求的同时也会携带jwt,这样以便用户知道是什么与服务器进行身份认证,并且服务器执行的操作是验证客户端发来的jwt的签名(就是它自己再算一遍第三部分 再把那个值与用户 发来的jwt第三部分对比),并且从jwt中获取当前用户的信息,以及知道该用户是否有权限获取服务器的资源。
总结 :cookie需要存储在服务端 而jwt并不需要!!
所以优势就很明显,你可以直接登陆别的服务器携带jwt即可
二. jwt结构
可以看见jwt有三个部分 Heard Payload 和verify signature
Heard和Payload是base64加密的,Heard部分其实仅在最后阶段对我们签名部分有用
1.Heard
这个部分有一个alg 这个代表了 我们第三部分的签名算法
2.payload
这个部分就含有很多用户信息
比如sub很可能就是用户id
iat则是这个jwt令牌过期时间(因为jwt不能一直有效,如果一直有效 万一发生泄露,那么jwt的一直有效会造成巨大影响)
3.verify signature
这一部分很重要
它将验证你实际验证的用户是否有篡改令牌及其令牌的工作方式
内容部分结构上面截图给的很清楚了
三.jwt的用处
如果使用cookie的话
访问右边的服务器是属于左边的,但是如果你要访问这两个服务器,(你已经注册登陆了左边的服务器)当你访问右边的服务器时得重新登陆,以便后台存储验证cookie,两个服务器都得存用户的凭证
用jwt
访问右边的服务器只需要发送相同的jwt就行了 无需重新登陆
还有一个好处就是当左边的服务器变的特别繁忙就需要右边的服务器提供资源,那么用户可以无感正常访问和请求,不用重登。