cookie、session、token、jwt

1、首先要知道认证、授权、凭证

认证是需要证明是你本人操作,授权是为了根据不同角色来分配权限,凭证就是认证后获取到的身份证明。

2、cookie是存在浏览器中的,是无状态的协议,所以不能确认访问者的身份。session是存在服务器与客户端会话的状态。但是http是无状态的,所以客户端第一次请求登录后,服务器返回一个sessionid给客户端,客户端保存在cookie中,下次请求的时候在携带sessionid来确认两次请求是同一个用户。

3、上面2这种只适合单机,如果是分布式部署的就需要使用以下二种方式:

session复制:由服务器a生成的session复制到b和c,这样每台服务器都有这个session了,但是如果有很多服务器都需要进行复制,消耗很大。只适合几台服务器之间。 

session共享:使用redis中间件,每次访问都会先经过redis获取session,使用redis的话就必须要做redis集群,以免redis挂掉后服务就崩了。

4、上面3的方式确实可以解决问题,但是需要搭建redis集群对于一些小厂来说就没必要了,所以这里又有了新的办法,使用token令牌的方式。

token是存在header或者auth认证中,包含了header头部存储加密算法、payload用户id和过期时间、sign保存的签名。http请求携带这三个信息传递到服务器,服务器根据header使用的算法和payload用户id,再根据服务器的密钥生产签名,如果这个签名和sign携带的签名一致,则通过。token完全可以解决redis的缺点,并且能实现sso单点登录,但是token的长度太大了,增加服务器的压力,而且token必须得等到过期时间到了才会过期,所以token比较适合做过期时间很短的业务。而且token不安全,js都可以随便获取到本地缓存。

token是用空间换时间的做法,redis是时间换空间的做法,看业务需要再决定使用哪个。

5、jwt跨域认证,跟token极其相似,区别在于,token是由服务器验证生成的签名,并且再验证用户的时候还会根据用户id再去查询一次数据库才能进行认证。jwt是根据token和payload加密后保存再客户端,认证的时候只需要服务器根据jwt密钥解密就行,不需要再去数据库查用户信息。

6、5涉及到了一些加密操作,密码之类的一般使用不可逆算法进行加密,就算获取到了加密后的密文,也是很难反向推算出密码的,除此还有可逆加密算法:对称加密和非对称加密。对称加密即是密钥即是加密密钥也是解密密钥;非对称加密的密钥分为公钥和私钥,公钥加密,私钥解密。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值