专栏目录
未完待续…
文章目录
基础概念
1. 认证
1.1 什么是认证
认证通常指的是确认某个事物或者某个人的真实性、合法性或者资格的过程。
认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。
在Web开发中,用户认证(登录)就是判断一个用户身份是否合法的过程。
1.2 常见的用户身份认证方式
- 用户名密码登录
- 二维码登录
- 手机短信登录
- 指纹认证
- 人脸识别
2. 会话
2.1 什么是会话
用户认证通过后,为了避免用户每次操作都要进行认证,可将用户的信息保存在会话中。
会话就是系统为了保持当前用户的登陆状态所提供的机制,常见方式为:
- 基于session方式
- 基于token方式
2.2 基于session方式
用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话)中,发给客户端的session_id存放在cookie中,这样客户端每次请求都会携带session_id来验证服务端是否存在session数据,以此进行用户身份的合法性校验,当用户退出系统或session过期后,客户端的session_id也就随之失效。
2.3 基于token方式
用户认证成功后,在服务端生成token发给客户端,客户端可以将该token在cookie或localStorage中存储。
这样客户端每次请求都会携带token,服务端收到请求后通过token即可验证用户身份。
除此之外,也可以使用Redis存储用户信息,在分布式中共享session。
cookie和localStorage
cookie在页面跳转的时候,存在于请求头中,不需要额外编写代码令请求头携带cookie
localStorage是浏览器的本地存储,只存储在当前页面,进行页面跳转时默认不会携带localStorage的数据,需要单独编写代码
2.4 总结
基于session的认证方式是Servlet规范的,服务端存储session需要占用内存资源,且客户端要支持cookie。
基于token的方式则不需要服务端存储token,且不限制客户端的存储方式。
在前后端分离的架构中,更适合采用不限制客户端的token认证方式
3. 授权
授权是用户认证确认通过后,分配给用户的资源访问权限,根据权限来控制用户访问资源的过程。
拥有资源访问的权限可以正常访问,否则拒绝访问
4. RBAC-基于角色的访问控制
如果存在多个用户需要授予的权限都相同,那么在实现上会非常麻烦,要把相同的权限进行反复地大量地授予。
为解决这一问题,就可以使用**RBAC(Role-Based Access Control)**基于角色的访问控制,就是把权限打包授予给角色(该角色拥有一组权限),通过角色分配给用户(用户可以拥有多个角色)。
因此需要构建表用于在数据库存储:
- 用户表
- 角色表
- 用户-角色表
- 权限表
- 角色-权限表
5. Java开发中的安全框架
框架 | 描述 |
---|---|
Shiro | 轻量级的安全框架,提供认证、授权、会话管理、密码管理、缓存管理等功能 |
SpringSecurity | 比Shiro功能更强,更复杂,权限控制粒度更细,对OAuth2有很好的支持,适用于Spring框架,集成于SpringBoot |
自定义 | 基于过滤器和AOP实现,难度大,效率低 |