在介绍之前先提一个问题:
问题1:springsecurity 与Oauth2.0到底有什么区别与联系?
springsecurity:Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。
oauth:OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。
从以上可以看出,security是spring的一个控制应用安全的一个框架;而oauth是一个关于授权的一个标准(之所以成为标准就是大家都认可呗),所以它俩根本就是两个不一样的东西;
之所以spring会有spring-cloud-starter-oauth2包,是因为springsecurity安全框架借鉴了Oauth的标准,把Oauth标准集成进来,来对受保护的资源进行安全授权;
大体流程图:
解释:
1.用户请求资源
OAuth2ClientAuthenticationProcessingFilter 过滤器获取token,然后根据token获取Authentication(用户验证信息)
2. 如果token获取不到,说明用户没有登陆,重定向到认证授权服务器登陆页面
2.1 用户输入用户名和密码登陆
2.2登陆成功重定向到授权页面进行授权;PS: 可以通过设置成默认授权模式,就不用跳转到授权页面,直接访问资源
2.3授权后,继续访问之前的资源(携带token)
3.token有效且获取到Authentication(保存在context中),继续访问资源
会被security资源保护拦截器拦截(FilterSecurityInterceptor)校验权限
4.有权限可以访问
5.无权限则抛出403异常
推荐文章:
https://blog.csdn.net/j754379117/article/details/70175198
https://blog.csdn.net/j754379117/article/details/70176974