session、token、jwt、oauth2 傻傻分不清
Hollis
共 9862字,需浏览 20分钟
·
2021-08-05 02:02
-
通俗地讲就是 验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)
-
用户名密码登录 -
邮箱发送登录链接 -
手机号接收验证码 -
只要你能收到邮箱/验证码,就默认你是账号的主人
-
游客模式下,可以正常浏览网站上面的文章,一旦想要点赞/收藏/分享文章,就需要登录或者注册账号。 -
登录模式,当用户登录成功后,服务器会给该用户使用的浏览器颁发一个令牌(token),这个令牌用来表明你的身份,每次浏览器发送请求时会带上这个令牌,就可以使用游客模式下无法使用的功能。
-
用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session -
请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器 -
浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名 -
当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
-
安全性:Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。 -
存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。 -
有效期不同:Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。 -
存储大小不同:单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。
Acesss Token
客户端使用用户名跟密码请求登录
-
服务端收到请求,去验证用户名与密码 -
验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端 -
客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里 -
客户端每次向服务端请求资源的时候需要带着服务端签发的 token -
服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据
Refresh Token
JWT 认证流程:
-
用户输入用户名/密码登录,服务端认证成功后,会返回给客户端一个 JWT -
客户端将 token 保存到本地(通常使用 localstorage,也可以使用 cookie) -
当用户希望访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用Bearer 模式添加 JWT
最近有很多人问,有没有读者交流群,想知道怎么加入。
最近我创建了一些群,大家可以加入。交流群都是免费的,只需要大家加入之后不要随便发广告,多多交流技术就好了。
目前创建了多个交流群,全国交流群、北上广杭深等各地区交流群、面试交流群、资源共享群等。
有兴趣入群的同学,可长按扫描下方二维码,一定要备注:全国 Or 城市 Or 面试 Or 资源,根据格式备注,可更快被通过且邀请进群。
往期推荐
招人!阿里!!
张小龙:做 PC 版微信是一种破坏,本来不想做
「吴X凡」的瓜,程序员这样吃才高级!
评论