OAuth + Security - 2 - 资源服务器配置
PS:此文章为系列文章,建议从第一篇开始阅读。
资源服务器配置
@EnableResourceServer 注解到一个@Configuration配置类上,并且必须使用ResourceServerConfigurer 这个配置对象来进行配置(可以选择继承自ResourceServerConfigurerAdapter然后覆写其中的方法,参数就是这个对象的实例),下面是一些可以配置的属性:
- ResourceServerSecurityConfigurer中主要包括:
tokenServices :ResourceServerTokenServices 类的实例,用来实现令牌服务。
tokenStore :TokenStore类的实例,指定令牌如何访问,与tokenServices配置可选
resourceId :这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证
其他的拓展属性例如 tokenExtractor 令牌提取器用来提取请求中的令牌。
- HttpSecurity配置这个与Spring Security类似:
请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。
通过 http.authorizeRequests()来设置受保护资源的访问规则
其他的自定义权限保护规则通过 HttpSecurity 来进行配置。
具体的配置信息如下:
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class DimplesResourceServerConfigurerAdapter extends ResourceServerConfigurerAdapter {
public static final String RESOURCE_ID = "dimples";
@Autowired
private TokenStore tokenStore;
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.resourceId(RESOURCE_ID)
.tokenServices(tokenService())
.stateless(true);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// 配置客户端权限scope
.antMatchers("/**").access("#oauth2.hasScope('all')")
.and().csrf().disable()
// 关闭session
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
/**
* 资源服务令牌解析服务,调用远程服务解析
*/
/*@Bean
public ResourceServerTokenServices tokenService() {
//使用远程服务请求授权服务器校验token,必须指定校验token 的url、client_id,client_secret
RemoteTokenServices service = new RemoteTokenServices();
service.setCheckTokenEndpointUrl("http://localhost:8080/oauth/check_token");
service.setClientId("dimples");
service.setClientSecret("123456");
return service;
}*/
/**
* 资源服务器令牌解析服务,资源和认证在一起,不用调用远程
*
* @return ResourceServerTokenServices
*/
@Bean
@Primary
public ResourceServerTokenServices tokenService() {
DefaultTokenServices services = new DefaultTokenServices();
// 必须设置
services.setTokenStore(tokenStore);
return services;
}
}
tokenService():是配置访问资源服务时传过来的令牌解析服务,有两种情况:
资源服务器和认证服务器在一起,这是只需要配置默认的DefaultTokenServices即可,但是要注意必须配置一个TokenStore,即是认证服务器中存储令牌的配置,在本地进行解析验证。
资源服务器和认证服务器不在一起,如微服务中的单独认证服务器和多个资源服务器,这是我们需要配置远程令牌访问解析服务RemoteTokenServices ,配置token的验证端点/oauth/check_token,最终将其配置到资源服务器。要注意的是,一定要在认证服务器中开启相应的端点:
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
security
// /oauth/token_key公开
.tokenKeyAccess("permitAll()")
// /oauth/check_token公开
.checkTokenAccess("permitAll()")
.allowFormAuthenticationForClients();
}
- 如果是资源服务分离情况下,还需要配置Security一个安全控制
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
/**
* 安全拦截机制(最重要)
*/
@Override
protected void configure(HttpSecurity http) throws Exception{
http.csrf().disable()
.authorizeRequests()
//所有/user/**的请求必须认证通过
.antMatchers("/user/**").authenticated()
//除了/user/**,其它的请求可以访问
.anyRequest().permitAll();
}
}
测试资源服务器
新建controller访问链接
@RestController
@RequestMapping("user")
public class UserController {
@GetMapping
@PreAuthorize("hasAuthority('admin')")
public DimplesUser user() {
DimplesUser user = new DimplesUser();
user.setUserName("username");
return user;
}
}
先通过密码模式获取token

然后带上获取的token去访问相应的资源
token传输格式为 在OAuth2.0中规定:
- token必须放在Header中
- 对应的格式为:token的参数名称为:Authorization,值为:Bearer token值

如果传错误的token

或者不传token

OAuth + Security - 2 - 资源服务器配置的更多相关文章
- OAuth + Security -1 - 认证服务器配置
配置 基础包依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- DotNetOpenAuth实践之Webform资源服务器配置
系列目录: DotNetOpenAuth实践系列(源码在这里) 上篇我们讲到WebApi资源服务器配置,这篇我们说一下Webform下的ashx,aspx做的接口如何使用OAuth2认证 一.环境搭建 ...
- DotNetOpenAuth实践之WCF资源服务器配置
系列目录: DotNetOpenAuth实践系列(源码在这里) 上一篇我们写了一个OAuth2的认证服务器,我们也获取到access_token,那么这个token怎么使用呢,我们现在就来揭开 一般获 ...
- OAuth + Security - 3 - JWT令牌
为什么使用JWT令牌 在上面的资源服务器中,通过配置,我们了解到,当我们拿着token去获取资源时,程序会先去调用远程认证服务器的端点去验证解析token,或者在本地解析校验token,这样毫无疑问, ...
- OAuth + Security - 5 - Token存储升级(数据库、Redis)
PS:此文章为系列文章,建议从第一篇开始阅读. 在我们之前的文章中,我们当时获取到Token令牌时,此时的令牌时存储在内存中的,这样显然不利于我们程序的扩展,所以为了解决这个问题,官方给我们还提供了其 ...
- Spring Security 静态资源访问
在搞 Spring Security 的时候遇到了一个小坑,就是静态资源加载的问题. 当我们继承了 WebSecurityConfigurerAdapter的时候,会去重写几个方法.去设定我们自己要过 ...
- Spring Security静态资源访问
在使用Spring Security时要求所有请求都需要授权访问,此时会定义过滤规则如下 protected void configure(HttpSecurity http) throws Exce ...
- springboot配置spring security 静态资源不能访问
在springboot整合spring security 过程中曾遇到下面问题:(spring boot 2.0以上版本 spring security 5.x (spring secur ...
- OAuth + Security - 6 - 自定义授权模式
我们知道OAuth2的官方提供了四种令牌的获取,简化模式,授权码模式,密码模式,客户端模式.其中密码模式中仅仅支持我们通过用户名和密码的方式获取令牌,那么我们如何去实现一个我们自己的令牌获取的模式呢? ...
- nginx静态资源服务器配置
编辑 nginx.conf server { listen 80; server_name file.youxiu326.xin; location /image/ { #访问 file.youxiu ...
随机推荐
- 3月2日,阿里云开源 PolarDB 企业级架构将迎来重磅发布
简介:2022年3月2日,开源 PolarDB 企业级架构将迎来重磅发布!本次发布会将首次公开开源 PolarDB 的总体结构设计和企业级特性,对 PolarDB for PostgreSQL 的存储 ...
- TDA-04D8变送器数据上报阿里云
简介:本文将以TDA-04D8变送器作为采集对象,使用海创微联采集控制系统对TDA-04D8变送器进行采集,然后将设备上的毛重.净重.皮重数据采集上传到阿里云物联网平台,阿里云物联网平台将数据实时可 ...
- 技术解析:一文看懂 Anolis OS 国密生态 | 龙蜥专场
简介: Anolis OS国密是社区在Anolis OS上做的国密技术解决方案. 编者注:本文系两位演讲者整理,他们在2021年阿里云开发者大会的「开源操作系统社区和生态分论坛」上带了分享,演讲主 ...
- dotnet 在 UOS 国产系统上使用 MonoDevelop 创建 GTK 全平台带界面应用
本文告诉大家如何在 UOS 国产系统上开始使用 MonoDevelop 开发,通过创建 GTK# 应用,进入界面开发的第一步 在开始之前需要小伙伴先安装好 MonoDevelop 工具 安装完成之后, ...
- async 与 promise 的区别
async函数会引式返回一个promise,而promise的resolve值就是函数return的值 使用async和await明显节约了不少代码,不需要.then,不需要写匿名函数处理promis ...
- CSP-S2023游记
不知不觉也高二了呢,最后一年OI了. Day -?? 过了初赛.没什么难度. Day -4 模拟赛挂分. RP++. Day -3 模拟赛挂分. RP++. Day -2 没挂分--?换数据了,又挂了 ...
- 最好用的AI换脸软件,rope下载介绍(支持cpu)
随着AI技术的广泛运用,市面上的换脸软件也多了起来,今天给各位介绍其中的王者Rope! 先上两个动图,给大伙看看效果 rope是如何实现这种自然的效果呢?这得益于机器学习技术的不断发展,rope经过深 ...
- (更新中)gprMax项目代码分解:gprMax.constants.py、gprMax.exceptions
目录 1. 引言 2. gprMax.constants.py 3. gprMax.exceptions.py 4. 总结 Reference 1. 引言 本文对gprMax项目中的"gpr ...
- python Requests 库的使用
目录 1. 介绍 2. 安装 3. 基本请求 3.1 get请求 3.2 post请求 3.3 自定义请求头部 3.4 设置超时时间 3.5 代理访问 3.6 session自动保存cookies 3 ...
- SHELL脚本获取域名对应的IP地址
单个获取 编写角本pingip.sh #!/bin/sh ADDR=qq.com TMPSTR=`ping ${ADDR} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'` ...