1. 基础概念
1.1 认证
认证是为了保护系统的隐私数据和资源,用户的身份合法方可访问系统的资源。
认证:用户认证就是判断一个用户的身份身份合法的过程。用户去访问系统资源时,系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。
常见认证方式:
用户名密码
二维码登录
手机验证码
指纹认证
1.2 会话
认证授权方案的产生根本原因应用层(WEB)通信基于HTTP协议,而HTTP协议是无状态的,我们无法通过HTTP访问确认用户是否登录。
用户登录后,为了避免用户每次操作都进行认证,需要将用户信息保存。
会话就是系统为了保持用户的登录状态提供的机制,常见的有基于Session-Cookie方式,基于token方式。
Session-Cookie
基于Session-Cookie方式自行查阅相关文档。
缺点:服务器内存需要存储session信息,天然不支持分布式。
token
token是就是令牌的意思。用户认证成功后,服务器端生成一个token发给客户端,客户端可以放到cookie或者localStorage等存储介质中。
每次请求时携带token,服务器通过接收校验该token来确认用户身份。
1.3 jwt
jwt(json web token)是token的一种实现方式。本质也是加密的字符串。jwt相关知识可自行参考相关文档。
Springboot + JWT-Token 生成与解析
1.4 授权
认证是为了保证用户身份的合法性,授权则是为了更细粒度的对隐私数据进行划分,授权不同的用户访问不同的资源。
授权:授权是用户认证通过后,根据用户的权限来控制用户访问资源的过程。
2. 授权的数据模型
授权可简单理解为who对what进行how操作。
who:即主体(Subject),主体一般值用户。
what:即资源(Resource),如菜单,页面,按钮代码方法、系统商品信息等。
系统菜单、页面、按钮、代码方法都属于系统功能资源,对于web系统每个功能资源通常对应一个URL;系统商品信息、订单信息、人员信息等属于实体资源(数据资源)。
实体资源有资源类型和资源实例组成,比如商品信息为资源类型,编号为001的商品为资源实例。
how:权限/许可(Permission),规定了用户对资源的操作许可,权限脱离资源没有意义,如用户添加权限、用户修改权限等。
通过权限可知用户对那些资源都有那些操作许可。