标题解释

  • 用 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 更强大

SpringSecurity 和JJWT区别_oauth


二者区别
  • Spring Security: 重量 级、功能丰富、spring 社区支持
  • Apache Shiro: 轻量 级、apache 社区支持

Spring Security 的核心功能

  • Authentication:认证,用户登录的验证 (你是谁)
  • 安全防护,防止跨域请求,session 攻击等(你在哪)
  • Authorization:授权,授权资源的访问权限(你能干什么)

登录认证核心技术

  • 同时支持多种认证方式(qq、weixin、github)
  • 同时支持多种前端渠道(手机、pc、)
  • 支持集群环境,跨应用工作,SESSION控制,控制用户权限,防护与认证相关的攻击

目标
可重用、企业级、认证和授权模块


技术点

SpringSecurity 和JJWT区别_spring_02

【归档】:基本(fei)概念(hua)

认证方式

  • (单体应用)基于 session 的认证方式
    客户端:要求把授权信息放在cookie里
    服务端:登录信息存 session
  • 基于 token 的认证方式
    不指定授权信息的存储位置 (如:cookie、localStorage)

授权的数据模型

  • 主体:Subject
  • 资源:Resource
    》功能资源:菜单、页面、按钮
    》数据资源(实体资源):商品信息、订单信息
  • 权限/许可:Permission

SpringSecurity 和JJWT区别_session_03

为了方便权限管理,我们通常会 添加 角色(对权限的打包)

因此,实际开发 一个模块 通常会分为以下 5 张表。

SpringSecurity 和JJWT区别_登录_04

RBAC

  • 基于角色的访问控制(Role-Based Access Control) 【x】
    【可扩展性差:当角色权限发生变化,需要编码层面进行修改】
  • SpringSecurity 和JJWT区别_oauth_05

  • 基于资源的访问控制(Resource-Based Access Control)
  • SpringSecurity 和JJWT区别_session_06

End


SpringSecurity 和JJWT区别_spring_07

任何身份认证,本质上都是基于对请求方的不信任所产生的。

协议角色和流程

  • 资源所有者(resource owner)
  • 资源服务器(client)
  • 授权服务器(authorization server)
  • 客户端/第三方协议(resource owner)

SpringSecurity 和JJWT区别_登录_08


SpringSecurity 和JJWT区别_oauth_09

SpringSecurity 和JJWT区别_oauth_10

SpringSecurity 和JJWT区别_spring_11

SpringSecurity 和JJWT区别_oauth_12


SpringSecurity 和JJWT区别_java_13


SpringSecurity 和JJWT区别_spring_14