spring security的知识摘要

spring security的知识摘要

1.首先spring security特点的主要操作可能是两个操作

第一个被称为“认证”,是为用户建立一个他所声明的主体。主体一般是指用户,设备或可以在系统中执行动作的其他系统。**

第二个叫“授权”,指的是一个用户能否在应用中执行某个操作,在到达授权判断之前,身份的主体已经由身份验证过程建立。
这些概念是通用的,不是Spring Security特有的。

2.对身份认证支持各种验证模式,有自己的,但大多数都是第三方提供的

其中有一个叫JA-SIG Central Authentication Service (CAS,这是一个流行的开源单点登录系统)

简单的说,CAS(Central Authentication Service – 中心认证服务)的目的就是使分布在一个企业内部各个不同异构系统的认证工作集中在一起,通过一个公用的认证系统统一管理和验证用户的身份。在CAS上认证的用户将获得CAS颁发的一个证书,使用这个证书,用户可以在承认CAS证书的各个系统上自由穿梭访问,不需要再次的登录认证。打个比方:对于加入欧盟的国家而言,在他们国家中的公民可以凭借着自己的身份证,在整个欧洲旅行,不用签证。对于企业内部系统而言,CAS就是这个颁发欧盟认证的系统,其它系统都是加入欧盟的国家,它们要共同遵守和承认CAS的认证规则。
因此CAS的设计愿景就是:
1。实现一个易用的、能跨不同Web应用的单点登录认证中心;
2。实现统一的用户身份和密钥管理,减少多套密码系统造成的管理成本和安全漏洞;
3。降低认证模块在IT系统设计中的耦合度,提供更好的SOA设计和更弹性的安全策略
具体参照Web 单点登录系统 JA-SIG CAS

3.SpringSecurity 是一个安全框架,那它提供了哪些安全措施呢?主要是三个方面,

  • 身份认证(你是谁?)
  • 权限校验(你能做什么?允许操作的范围)
  • 攻击防护(防止伪造身份)

4.说说Security 流程

1、 首先, 当用户登录时, 前端会把用户输入的用户名、 密码信息传输到后台, 后台用一个类对象将其封装起来,

通常使用的是UsernamePasswordAuthenticationToken这个类。

2、 再来, 到程序负责验证这个类对象。 验证方法是调用Service根据username从数据库中取用户信息到实体类的实例中,

比较两者的密码, 如果密码正确就成功登陆, 同时把包含着用户的用户名、 密码、 所具有的权限等信息的类对象

放到SecurityContextHolder(安全上下文容器, 类似Session) 中去。

3、 其次, 在用户访问一个资源的时候, 需要先判断是否是受限资源。 如果是的话还要判断当前是否未登录,

没有的话就跳到登录页面。

4、 最后!如果用户已经登录, 并访问一个受限资源的时候, 程序要根据url去数据库中取出该资源所对应的

所有可以访问的角色, 然后拿着当前用户的所有角色一一对比, 判断用户是否可以访问。

5.OAuth2 和JWT区别与联系是?

JWT是一种认证协议

JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。

OAuth2是一种授权框架

另一方面,OAuth2是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。

6.什么是JWT

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

具体看JWT与session认证,token认证的区别

具体看10分钟了解JSON Web令牌(JWT)

JWT+SpringSecurity实现基于Token的单点登录(一):前期准备

JWT+SpringSecurity实现基于Token的单点登录(二):认证和授权

7.什么是Oauth2

OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
应用场景
第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如QQ,微博,微信的授权登录。

具体看Oauth2详解-介绍(一)

8.SpringSecurity基本原理

要想让一个系统的登录流程走SpringSecurity框架的逻辑,那么首先需要先写一个类去继承WebSecurityConfigurerAdapter,然后重写里面的configure方法,这个时候如果不做任何配置,去访问服务器中的任意接口的时候都会弹出一个alert框去输入一个用户名和密码。

认证原理
在这里插入图片描述

其中,表单登录只是其中的一种过滤方式,httpBasic这种过滤方式是在表单登录之后,类似于责任链模式,除了这两种方式SpringSecurity还支持很多种过滤方式。当请求通过这些绿色的过滤器之后,请求会进入到FilterSecurityInterceptor适配器上,这个是整个SpringSecurity过滤器的最后一环,是最终的守门人,它会去决定请求最终能否去访问到我们的Rest服务,那它依据什么区判断的呢?就是依据我们代码中写的后五行(对请求进行授权,然后对系统中的anyRequest任何请求都要去进行授权认证),这些规则都会被放到
FilterSecurityInterceptor中,当认证成功则可以访问资源,如果认证失败,就会根据失败原因抛出相应的异常,进入到ExceptionTranslationFilter中,这个过滤器根据这些异常会做出相应的处理。
注意:

在这一系列过滤器链中,绿色的过滤器可以通过配置去完成自定义配置,蓝色及黄色是不能控制的。它们一定都会生效且位置固定。(ExceptionTranslationFilter一定在FilterSecurityInterceptor之前)

9.Spring Security 中的四种常见权限控制方式

  • 表达式控制 URL 路径权限
  • 表达式控制方法权限
  • 使用过滤注解
  • 动态权限
    具体参照Spring Security 中的四种权限控制方式
    ,直接有springsecurity一个系列的
    比如Spring Boot+CAS 单点登录,如何对接数据库?
    用 Swagger 测试接口,怎么在请求头中携带 Token
    等等

10.springboot + spring security验证token进行用户认证

核心组件
SecurityContextHolder:存放身份信息的容器

Authentication:用户信息的抽象

AuthenticationManager:身份认证器
详情点击token进行用户认证
11.SpringSecurity用户认证流程
当用户发送登录请求的时候,首先进入到UsernamePasswordAuthenticationFilter中进行校验。
在这里插入图片描述详情SpringSecurity用户认证流程
12.SpringSecurity登录原理(源码级讲解)

首先会进入UsernamePasswordAuthenticationFilter并且设置权限为null和是否授权为false,然后进入ProviderManager查找支持UsernamepasswordAuthenticationToken的provider并且调用provider.authenticate(authentication);再然后就是UserDetailsService接口的实现类(也就是自己真正具体的业务了),这时候都检查过了后,就会回调UsernamePasswordAuthenticationFilter并且设置权限(具体业务所查出的权限)和设置授权为true(因为这时候确实所有关卡都检查过了)。

只是简单说下类之间的调用顺序。

UsernamePasswordAuthenticationFilter
Authentication
AuthenticationManager
AuthenticationProvider
UserDetailsService
// 回到起点进行后续操作,比如缓存认证信息到session和调用成功后的处理器等等
UsernamePasswordAuthenticationFilter

具体看SpringSecurity登录原理(源码级讲解)
13.Spring Security配置类解析
@EnableWebSecurity注解:启用Web安全功能(但其本身并没有什么用处,Spring Security的配置类还需实现WebSecurityConfigurer或继承WebSecurityConfigurerAdapter类,采用后者,会更简单去配置使用。
@EnableWebMvcSecurity注解:在Spring 4.0中已弃用。

WebSecurityConfigurerAdapter类:可以通过重载该类的三个configure()方法来制定Web安全的细节。

  1. configure(WebSecurity):通过重载该方法,可配置Spring Security的Filter链。
  2. configure(HttpSecurity):通过重载该方法,可配置如何通过拦截器保护请求。
  3. configure(AuthenticationManagerBuilder):通过重载该方法,可配置user-detail(用户详细信息)服务。

具体看Spring Security配置类方法详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值