一:首先要理解Oauth2是什么?有什么用?
spring.io官网解释:
The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service,either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.
Oauth2是一种协议,用来解决支持第三方应用程序以自己的名义获取已经被授权的资源。
这么解释可能还是难理解:再详细解释:
1.1 Oauth2是一种协议:
可以理解为Oauth2是一种规范,规定了第三方应用获取资源必须要遵守这样的“模式”(等下再解释“模式”);
既然是规范,可以联想到,http协议也是一种规范,JPA也是一种数据持久化规范;
规范产生就一定伴随着很多具体实现的框架的产生,
例如HttpClient是http协议的具体实现一种,Hibernate是JPA具体实现的一种,
那么Oauth2的具体实现框架有security,shiro,甚至可以自己实现;应为security是spring自己的亲儿子,所以就有Spring security Oauth2,其实就是security对Oauth2的实现,spring有springBoot项目的快速构建,那当然也少不了Spring boot整合security快速构建认证授权项目。
1.2“Oauth2是一种协议,用来解决支持第三方应用程序以自己的名义获取已经被授权的资源”我们可以从这几句话分离出几个名词,Oauth2对这些名词有特别解释;
“第三方应用程序” :第三方应用程序-client
“获取资源过程” :服务提供商(资源的管理员,一般指网关)
“自己的名义” :资源所有者-user
“授权” :认证授权服务器-authServer
“资源” :资源服务器-resourceServer
1.3 “模式”
授权码模式
简单模式
密码模式
客户端模式
。。。。。。。。。。。。。。继续更新中。。。。。。。。。。。。。。。
1.需求1:
admin用户可以访问所有资源,role1用户只可以访问role1资源
:只需要spring security就能实现
//spring security提供的关键类,实现2+1方法(实现2个方法,另外一个返回PasswordEncoder的方法)
WebSecurityConfigAdapter
/**
方法一:配置UserDetailService 数据源。设置用户信息
**/
config(AuthenticationManagerBuilder auth)
/**
方法二:校验请求资源和授权规则:(/**这个路径需要admin权限;/role1/**这个路径需要role1资源)
**/
config(HttpSecurity http)
/**
方法三:获取密码比对器,作用是用来比对用户输入密码跟程序存的(设置)密码的匹配方式
**/
PasswordEncoder getPasswordEncoder()
2:需求2:
role1资源部署在role1服务器,role2资源部署在role2服务器。
场景:admin需要访问role1,再去访问role2。
问题:访问role1时需要输入账号密码,再访问role2时也需要再输入用户密码
解决:第一次访问role1在登陆成功后,生成一个token,存在数据库(redis或mysql)
中或者(启用网关服务存在网关的session中);访问role2时携带token,创建一个
前置过滤器验证token正确性。
需要:springsecuriyweb 过滤器链