SpringSecurity Oauth2.0原理篇(一)

前言

Spring security oauth2.0是一个基于oauth2.0开放网络标准的高度可定制的身份验证和访问控制框架。它是确保基于Spring的应用程序的标准。
简单来说总结为以下两点:
	1、认证(Authentication):即证明“你是你”,常见的如果用户名密码匹配,则认为操作者是该用户。
	2、鉴权(Authorization):即判断“你有没有资格”,例如“删贴”功能只允许管理员使用。
OAuth2.0
1、原理描述
授权机制以快递员进小区为例:

第一步,门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。

第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。

我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。

第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。

第四步,快递员向门禁系统输入令牌,进入小区。

有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。
OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
2、OAuth2.0认证角色类别
resource owner:资源所有者,指终端的“用户”(user)
resource server:资源服务器,即服务提供商存放受保护资源。访问这些资源,需要获得访问令牌(access token)。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。如果,我们访问新浪博客网站,那么如果使用新浪博客的账号来登录新浪博客网站,那么新浪博客的资源和新浪博客的认证都是同一家,可以认为是同一个服务器。如果,我们是新浪博客账号去登录了知乎,那么显然知乎的资源和新浪的认证不是一个服务器。
client:客户端,代表向受保护资源进行资源请求的第三方应用程序。
authorization server: 授权服务器, 在验证资源所有者并获得授权成功后,将发放访问令牌给客户端
3、OAuth2.0四种认证模式
授权码模式(authorization code)
简化模式(implicit)(client为浏览器/前端应用)
密码模式(resource owner password credentials)(用户密码暴露给client端不安全)
客户端模式(client credentials)(主要用于api认证,跟用户无关)

注意,不管哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的。

4、授权码认证流程
第三方用户 ——> 登录应用 ——> 第三方认证服务 ——> 获取授权码 ——> 第三方认证服务 ——> 获取令牌 ——> 第三方资源服务器 ——> 获取用户的信息->应用服务器授权认证

在这里插入图片描述

1、客户端请求服务的授权页面呈现给用户,用户点击确认授权后服务端返回授权许可凭证给客户端
2、客户端应用通过第二步的凭证(code)向授权服务器请求授权
3、授权服务器验证凭证(code)通过后,同意授权,并返回一个资源访问的凭证(Access Token)。
4、客户端应用通过第四步的凭证(Access Token)向资源服务器请求相关资源。
5、资源服务器验证凭证(Access Token)通过后,将客户端应用请求的资源返回。
5、密码登陆认证
1、用户向客户端提供用户名和密码
2、客户端将用户名密码发送认证给服务器,向后者请求令牌
3、认证服务器确认无误后,向客户端提供访问令牌
SpringSecurity
1、原理描述
	Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

	整个框架的核心是一个过滤器,这个过滤器名字叫springSecurityFilterChain类型是FilterChainProxy
	核心过滤器里面是过滤器链(列表),过滤器链的每个元素都是一组URL对应一组过滤器
	WebSecurity用来创建FilterChainProxy过滤器,
	HttpSecurity用来创建过滤器链的每个元素。

在这里插入图片描述

pigx 配置

在这里插入图片描述

2、关键点Authentication
Authentication是一个接口,用来表示用户认证信息,在用户登录认证之前相关信息会封装为一个Authentication具体实现类的对象,在登录认证成功之后又会生成一个信息更全面,包含用户权限等信息的Authentication对象,然后把它保存在 SecurityContextHolder所持有的SecurityContext中,供后续的程序进行调用,如访问权限的鉴定等。

在这里插入图片描述

3、框架核心类关系

在这里插入图片描述

参考文献

Spring Securiy 官方文档

老郑来了

阮一峰的网络日志

深入理解OAuth2.0&基于OAuth2.0第三方登录之GitHub实践

深入浅出Spring Security(一):三句话解释框架原理

学Spring security ,从零开始,这一篇就够了!!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值