基于token或session的认证方式的区别

698 阅读4分钟

这是我参与8月更文挑战的第3天,活动详情查看:[8月更文挑战]

image.png

前言

本次让我们聊一下安全的那些事,安全的那些框架优缺点。

首先为什么网络安全如此重要?信息安全是一门历史不足30年的新兴学科。与IT其他方面和非计算机相关产业相比,信息安全还只处于婴儿期。不过,随着这一行业的成熟发展,杰出的领导者们开始共享自己的成功与困难,发展出供其他人遵循的模式。这些模式从口耳相传的话语,演变成了业界支持的正式框架。

1. 认证是什么

判断用户是否合法的过程,常见用户名密码登录,二维码登录,手机短信登录,指纹认证等

2. 什么是会话

避免用户认证通过后每次都要认证。一旦认证成功就不用了重复进那个页面都要认证,一般需要二次认证的是机密信息查看或者支付密码。

会话为了保持用户登录状态所提供的机制,目前有两种实现方式:基于session方式与基于token方式等。

基于session的认证方式

它的交互流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前绘画中),发给客户端的sessionid存放到cookie中,这样用户客户端请求时带上sessionid就可以验证服务端是否存在session数据;以此完成用户的合法校验,当用户退出系统或session过期销毁时,客户的sessionid也就无效了

image.png

基于token方式如下图

它的交互流程是,用户认证成功后,服务端生成一个token发给客户端,客户端可以放到cookie或localstorage等存储中,每次请求时带上token,服务端收到token通过验证后即可确认用户身份

image.png

3.什么是授权

授权是为了判断你是否拥有权限

认证是为了保证用户身份的合法性,而授权是为了更细粒度的对隐私数据划分判断你是否有权限使用。授权是认证通过后发生的,控制不同的用户能够访问不同的资源

先认证后授权

4.RBAC有两种

  • 基于角色的访问控制,按角色进行授权
  • 基于资源的访问控制,按资源或权限进行授权 (新RBAC 主要是为了解耦)

5.web授权有顺序写法之分

web授权采用的是链式编程

image.png

6. 分布区认证方式

1. 基于session的认证方式

在分布式的环境下,基于session的认证会出现一个问题,每个应用服务器都要在session中存储用户身份信息,通过负载均衡讲本地请求分配到另一个应用服务器,否则会重新认证 image.png

通常有以下几种:

session复制:多台应用服务器之间同步session,使session保持一致

session粘贴:当用户访问集群中某台服务器后,强制制定后续的请求都均落到此机器上

session集中存储:讲session存入分布式缓存中,所有服务器应用实例同一从分布式缓存中获取session

总体来讲,基于session认证的认证方式,可以更好地在服务端对会话进行控制,并且安全性较高,但是session机制方式基于cookie,在复杂多样的客户端上不能有效使用,并且无法跨域

2.基于token的认证方式

基于token的认证方式,服务端不用存储认证数据,易维护扩展性强,并且客户端可以吧token存在任意地方,并且可以实现web和app同一认证机制。缺点也很明显,token因为自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占贷款。另外,token的签名验签操作会给cpu带来额外的处理负担

image.png

根据上面分析,分布式一般采用token的认证方式,优点是:
  1. 适合同一认证的机制,客户端、一方应用、三方应用都遵循一致认证机制

  2. token认证方式对第三方应用接入个更合适,因为它更开放,可使用目前流行的开放协议Oauth2.0、JWT等

  3. 一般情况服务端无需存储会话信息,减轻了服务端的压力