标题解释
- 用 Spring Security 实现认证和授权
- OAuth 2.0 一种协议,支持第三方认证(分布式)
人生苦短,及时行乐。
[x] shiro
[√] spring Security
[x] cas Server
[√] OAuth2.0
.
从使用情况(下图),shiro 更多,这是由于shiro相对轻量级,想用就用。而 spring security 需要依托于 spring。
但,随着 springboot 脚手架的发展,想在spring 环境中使用 security 也是非常方便的
(不需要太多配置即可使用)
且,spring security 和 分布式、微服务、spring cloud系列的结合非常“丝滑”。
因此,从长远角度,spring security 更强大。
二者区别
- Spring Security:
重量
级、功能丰富、spring 社区支持 - Apache Shiro:
轻量
级、apache 社区支持
Spring Security 的核心功能
- Authentication:认证,用户登录的验证 (你是谁)
- 安全防护,防止跨域请求,session 攻击等(你在哪)
- Authorization:授权,授权资源的访问权限(你能干什么)
登录认证核心技术
- 同时支持多种认证方式(qq、weixin、github)
- 同时支持多种前端渠道(手机、pc、)
- 支持集群环境,跨应用工作,SESSION控制,控制用户权限,防护与认证相关的攻击
目标
可重用、企业级、认证和授权模块
技术点
【归档】:基本(fei)概念(hua)
认证方式
- (单体应用)基于 session 的认证方式
客户端:要求把授权信息放在cookie里
服务端:登录信息存 session - 基于 token 的认证方式
不指定授权信息的存储位置 (如:cookie、localStorage)
授权的数据模型
- 主体:Subject
- 资源:Resource
》功能资源:菜单、页面、按钮
》数据资源(实体资源):商品信息、订单信息 - 权限/许可:Permission
为了方便权限管理,我们通常会 添加 角色(对权限的打包)
因此,实际开发 一个模块 通常会分为以下 5 张表。
RBAC
基于角色的访问控制(Role-Based Access Control)【x】
【可扩展性差:当角色权限发生变化,需要编码层面进行修改】- 基于资源的访问控制(Resource-Based Access Control)
End
任何身份认证,本质上都是基于对请求方的不信任所产生的。
协议角色和流程
- 资源所有者(resource owner)
- 资源服务器(client)
- 授权服务器(authorization server)
- 客户端/第三方协议(resource owner)