这是我参与8月更文挑战的第3天,活动详情查看:[8月更文挑战]
前言
本次让我们聊一下安全的那些事,安全的那些框架优缺点。
首先为什么网络安全如此重要?信息安全是一门历史不足30年的新兴学科。与IT其他方面和非计算机相关产业相比,信息安全还只处于婴儿期。不过,随着这一行业的成熟发展,杰出的领导者们开始共享自己的成功与困难,发展出供其他人遵循的模式。这些模式从口耳相传的话语,演变成了业界支持的正式框架。
1. 认证是什么
判断用户是否合法的过程,常见用户名密码登录,二维码登录,手机短信登录,指纹认证等
2. 什么是会话
避免用户认证通过后每次都要认证。一旦认证成功就不用了重复进那个页面都要认证,一般需要二次认证的是机密信息查看或者支付密码。
会话为了保持用户登录状态所提供的机制,目前有两种实现方式:基于session方式与基于token方式等。
基于session的认证方式
它的交互流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前绘画中),发给客户端的sessionid存放到cookie中,这样用户客户端请求时带上sessionid就可以验证服务端是否存在session数据;以此完成用户的合法校验,当用户退出系统或session过期销毁时,客户的sessionid也就无效了
基于token方式如下图
它的交互流程是,用户认证成功后,服务端生成一个token发给客户端,客户端可以放到cookie或localstorage等存储中,每次请求时带上token,服务端收到token通过验证后即可确认用户身份
3.什么是授权
授权是为了判断你是否拥有权限
认证是为了保证用户身份的合法性,而授权是为了更细粒度的对隐私数据划分判断你是否有权限使用。授权是认证通过后发生的,控制不同的用户能够访问不同的资源
先认证后授权
4.RBAC有两种
- 基于角色的访问控制,按角色进行授权
- 基于资源的访问控制,按资源或权限进行授权 (新RBAC 主要是为了解耦)
5.web授权有顺序写法之分
web授权采用的是链式编程
6. 分布区认证方式
1. 基于session的认证方式
在分布式的环境下,基于session的认证会出现一个问题,每个应用服务器都要在session中存储用户身份信息,通过负载均衡讲本地请求分配到另一个应用服务器,否则会重新认证
通常有以下几种:
session复制:多台应用服务器之间同步session,使session保持一致
session粘贴:当用户访问集群中某台服务器后,强制制定后续的请求都均落到此机器上
session集中存储:讲session存入分布式缓存中,所有服务器应用实例同一从分布式缓存中获取session
总体来讲,基于session认证的认证方式,可以更好地在服务端对会话进行控制,并且安全性较高,但是session机制方式基于cookie,在复杂多样的客户端上不能有效使用,并且无法跨域
2.基于token的认证方式
基于token的认证方式,服务端不用存储认证数据,易维护扩展性强,并且客户端可以吧token存在任意地方,并且可以实现web和app同一认证机制。缺点也很明显,token因为自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占贷款。另外,token的签名验签操作会给cpu带来额外的处理负担
根据上面分析,分布式一般采用token的认证方式,优点是:
-
适合同一认证的机制,客户端、一方应用、三方应用都遵循一致认证机制
-
token认证方式对第三方应用接入个更合适,因为它更开放,可使用目前流行的开放协议Oauth2.0、JWT等
-
一般情况服务端无需存储会话信息,减轻了服务端的压力