【token机制详解,机制原理安全吗?】A 生成 session 后复制到 B, C,这样每台机器都有一份 session,无论添加购物车的请求打到哪台机器,由于 session 都能找到,故不会有问题
文章插图
balance (1)
这种方式虽然可行,但缺点也很明显:
- 同一样的一份 session 保存了多份,数据冗余
- 如果节点少还好,但如果节点多的话,特别是像阿里,微信这种由于 DAU 上亿,可能需要部署成千上万台机器,这样节点增多复制造成的性能消耗也会很大 。
upstream tomcats {
ip_hash;
server 10.1.1.107:88;
server 10.1.1.132:80;
}
文章插图
这样的话每个 client 请求到达 Nginx 后,只要它的 ip 不变,根据 ip hash 算出来的值会打到固定的机器上,也就不存在 session 找不到的问题了,当然不难看出这种方式缺点也是很明显,对应的机器挂了怎么办?
这种方式也是目前各大公司普遍采用的方案,将 session 保存在 redis,memcached 等中间件中,请求到来时,各个机器去这些中间件取一下 session 即可 。
文章插图
缺点其实也不难发现,就是每个请求都要去 redis 取一下 session,多了一次内部连接,消耗了一点性能,另外为了保证 redis 的高可用,必须做集群,当然了对于大公司来说, redis 集群基本都会部署,所以这方案可以说是大公司的首选了 。
Token:no session!通过上文分析我们知道通过在服务端共享 session 的方式可以完成用户的身份定位,但是不难发现也有一个小小的瑕疵:搞个校验机制我还得搭个 redis 集群?大厂确实 redis 用得比较普遍,但对于小厂来说可能它的业务量还未达到用 redis 的程度,所以有没有其他不用 server 存储 session 的用户身份校验机制呢,这就是我们今天要介绍的主角:token 。
首先请求方输入自己的用户名,密码,然后 server 据此生成 token,客户端拿到 token 后会保存到本地,之后向 server 请求时在请求头带上此 token 即可 。
文章插图
相信大家看了上图会发现存在两个问题
1、 token 只存储在浏览器中,服务端却没有存储,这样的话我随便搞个 token 传给 server 也行?
答:server 会有一套校验机制,校验这个 token 是否合法 。
2、怎么不像 session 那样根据 sessionId 找到 userid 呢,这样的话怎么知道是哪个用户?
答:token 本身携带 uid 信息
第一个问题,如何校验 token 呢?我们可以借鉴 HTTPS 的签名机制来校验 。先来看 jwt token 的组成部分
文章插图
可以看到 token 主要由三部分组成
- header:指定了签名算法
- payload:可以指定用户 id,过期时间等非敏感数据
- Signature: 签名,server 根据 header 知道它该用哪种签名算法,再用密钥根据此签名算法对 head + payload 生成签名,这样一个 token 就生成了 。
- 文案创作怎么做,创作思路及编辑详解?
- seo网络营销的技术有哪些,搜索引擎优化营销详解?
- 英国疫情最新数据详解,港国际航班较疫情前大幅下跌71%?
- 直播口才训练方法详解,如何锻炼自己拥有主播的口才?
- 公司组织架构怎么制定,组织架构设置原则及设置方法详解?
- 科技前沿最新分析,2022年七大前沿科技详解?
- 天蝎座2014年运势 天蝎座2014年运势详解
- 北约有哪些国家,北约的国家组成详解?
- 美团外卖app怎么样,下载及投诉详解?
- 网站如何做seo,网站seo优化流程详解?