Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离
《Spring Security实现OAuth2.0授权服务 - 基础版》和《Spring Security实现OAuth2.0授权服务 - 进阶版》两篇文章中介绍如何搭建OAuth2.0授权服务器和资源服务器。
本文将继续优化,将授权服务器和资源服务器分离,部署在不同的服务器上面。
一、简要说明
Spring Security OAuth2.0既可以把授权服务器(AuthorizationServer)和资源服务器(ResourceServer)配置在一个应用中,也可以分开配置。
授权服务器负责用户登录、授权、token验证等。
资源服务器负责提供受保护资源,只是需要到授权服务器进行token验证。
在此部分,将介绍以下内容:
- 如何将AuthorizationServer和ResourceServer分开配置,各司其职。
- 使用postman替换curl命令作为接口调用的工具。
- 依赖、实体类、工具类、DAO、Service、授权页、登录页等内容与上一部分没有区别,不再赘述,只记录需要修改的内容。
二、AuthorizationServer配置
在上一部分的代码(Spring Security实现OAuth2.0进阶)中抽取以下内容:
- 实体类。
- 登录页和授权页。
- DAO和Service层。
- Mybatis配置、Security配置和AuthorizationServerConfigurer配置。
需要修改一部分代码。
1、修改AuthorizationServerConfigurer配置
重写configure(AuthorizationServerSecurityConfigurer)方法,配置前来验证token的client需要拥有ROLE_TRUSTED_CLIENT角色。
@Configuration
public class Oauth2AuthorizationServerConfiguration extends
AuthorizationServerConfigurerAdapter { @Autowired
private UserDetailsService userDetailsService;
@Autowired
private DataSource dataSource; @Override
public void configure(AuthorizationServerSecurityConfigurer security)
throws Exception {
// 配置前来验证token的client需要拥有的角色
security.checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')");
} @Override
public void configure(ClientDetailsServiceConfigurer clients)
throws Exception {
// 不变
} @Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception {
// 不变
}
}
2、修改启动类
启动类删除@EnableResourceServer注解。
@SpringBootApplication
@EnableAuthorizationServer
@MapperScan("org.net5ijy.oauth2.repository")
public class Oauth2AuthorizationServer { public static void main(String[] args) { // args = new String[] { "--debug" }; SpringApplication.run(Oauth2AuthorizationServer.class, args);
}
}
三、ResourceServer配置
在上一部分的代码(Spring Security实现OAuth2.0进阶)中抽取以下内容:
- 响应工具类
- 受保护资源controller
1、配置Spring Security
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override
protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/order/**").authenticated(); // 禁用CSRF
http.csrf().disable();
}
}
2、配置ResourceServerConfigurer
需要配置一个受信任的client到授权服务器验证token令牌。
@Configuration
public class Oauth2ResourceServerConfiguration extends ResourceServerConfigurerAdapter { private static final String URL = "http://localhost:7002/oauth/check_token"; @Override
public void configure(ResourceServerSecurityConfigurer resources)
throws Exception { RemoteTokenServices tokenService = new RemoteTokenServices();
tokenService.setCheckTokenEndpointUrl(URL);
tokenService.setClientId("net5ijy");
tokenService.setClientSecret("12345678"); resources.tokenServices(tokenService);
}
}
3、修改启动类
启动类删除@EnableAuthorizationServer注解。
@SpringBootApplication
@EnableResourceServer
public class Oauth2ResourceServer { public static void main(String[] args) {
SpringApplication.run(Oauth2ResourceServer.class, args);
}
}
四、测试授权码模式
首先启动授权服务器,再启动资源服务器。
1、获取authorization_code授权码
使用浏览器访问:
http://localhost:7002/oauth/authorize?response_type=code&client_id=tencent&redirect_uri=http://localhost:8080&scope=all
地址
http://localhost:7002/oauth/authorize
参数
response_type |
code |
client_id |
根据实际的client-id填写,此处写tencent |
redirect_uri |
生成code后的回调地址,http://localhost:8080 |
scope |
权限范围 |
登录,admin002和123456
允许授权
看到浏览器重定向到了http://localhost:8080并携带了code参数,这个code就是授权服务器生成的授权码
2、获取token令牌
地址
http://localhost:7002/oauth/token
参数
grant_type |
授权码模式,写authorization_code |
scope |
权限范围 |
redirect_uri |
回调地址,http://localhost:8080需要urlencode |
code |
就是上一步生成的授权码 |
使用postman获取token令牌。
返回值
{
"access_token": "e50a400c-439f-4df0-95d5-79154d2cbf87",
"token_type": "bearer",
"refresh_token": "29ac936f-69ef-4356-91b1-775fbec65805",
"expires_in": 3599,
"scope": "all"
}
这样就获取到了token令牌,该token的访问权限范围是all权限,在1小时后失效。
3、使用token访问资源
http://localhost:7003/order/demo?access_token=e50a400c-439f-4df0-95d5-79154d2cbf87
五、Github源码下载
https://github.com/xuguofeng/springsecurityoauth2
Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离的更多相关文章
- Spring Security OAuth2.0认证授权六:前后端分离下的登录授权
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)
项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖 ...
- 【OAuth2.0】Spring Security OAuth2.0篇之初识
不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...
- 基于spring boot2.0+spring security +oauth2.0+ jwt微服务架构
github地址:https://github.com/hankuikuide/microservice-spring-security-oauth2 项目介绍 该项目是一个演示项目,主要演示了,基于 ...
- Spring Security OAuth2.0认证授权二:搭建资源服务
在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...
- Spring Security OAuth2.0认证授权四:分布式系统认证授权
Spring Security OAuth2.0认证授权系列文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授 ...
- Spring Security OAuth2.0认证授权三:使用JWT令牌
Spring Security OAuth2.0系列文章: Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二: ...
- Spring Security OAuth2.0认证授权五:用户信息扩展到jwt
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)
最近再学习spring security oauth2.下载了官方的例子sparklr2和tonr2进行学习.但是例子里包含的东西太多,不知道最简单最主要的配置有哪些.所以决定自己尝试搭建简单版本的例 ...
随机推荐
- phpcms添加https后台分页错误的解决方法
今天修改一位客户的phpcms网站,他要求添加https,这对ytkah来说是轻车熟路了,但是后台稍微有点问题,点击分页出现错误,将鼠标移到下一页显示的链接是https://www.abc.com/w ...
- java任务调度之Timer定时器
定时器相信大家都不陌生,平时使用定时器就像使用闹钟一样,我们可以在固定的时间做某件事,也可以在固定的时间段重复做某件事,今天就来分析一下java中自带的定时任务器Timer. 一.Timer基本使用 ...
- APIO2019游记
Day -n~Day -2 文化课好难啊.. Day -1~Day 0 颓颓颓 Day 1 人生第一次用Linux 根本不会 早上刚学会怎么编译 不到1h就上考场实战了 开始之后写了读优 一直编译失败 ...
- [51nod1227]平均最小公倍数(莫比乌斯反演+杜教筛)
题意 求 $\sum_{i=a}^b \sum_{j=1}^i \frac{lcm(i,j)}{i}$. 分析 只需要求出前缀和, $$\begin{aligned}\sum_{i=1}^n \sum ...
- bzoj2187 fraction&&hdu3637 Find a Fraction——类欧几里得
bzoj2187 多组询问,每次给出 $a, b, c, d$,求满足 $\frac{a}{b} < \frac{p}{q} < \frac{c}{d}$ 的所有二元组 $(p, q)$ ...
- C# XML封装
/************************************************* * 描述: * * Author:yuanshuo@healthcare.cn * Date:20 ...
- postgresql plv8 安装
网上可以看到pg 9.6 版本的plv8容器镜像,没有pg 高版本的支持镜像,但是在基于原有dockerfile 进行构建的时候,居然失败了,有墙的问题,有版本的问题 所以通过虚拟机尝试下构建方式安装 ...
- 洛谷P1578 奶牛牧场(悬线法思想)
题目 悬线法的思想--即扫描线的思想,每个矩阵必定是由两个障碍来构成左右边界或者上下边界. 如果此两个障碍组成了左右边界,枚举这两个障碍中途更新这两个障碍之间的矩阵上下边界,并且更新最大值. 考虑如何 ...
- rsync 使用方法 ssh免密问题 不同端口同步
不同端口同步(前提还是做好免密) 主要通过选项-e "ssh -p 端口"来实现 重命名了秘钥文件 指定-i即可~ 1. 本地目录同步到导地不同端口主机目录 [root@bakse ...
- 【ASP.NET Core分布式项目实战】(六)Gitlab安装
Gitlab GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能.使用Git作为代码管理工具,并在此基础上搭建起来的web服务 ...