PS:此文章为系列文章,建议从第一篇开始阅读。

资源服务器配置

@EnableResourceServer 注解到一个@Configuration配置类上,并且必须使用ResourceServerConfigurer 这个配置对象来进行配置(可以选择继承自ResourceServerConfigurerAdapter然后覆写其中的方法,参数就是这个对象的实例),下面是一些可以配置的属性:

  • ResourceServerSecurityConfigurer中主要包括:
  1. tokenServices :ResourceServerTokenServices 类的实例,用来实现令牌服务。

  2. tokenStore :TokenStore类的实例,指定令牌如何访问,与tokenServices配置可选

  3. resourceId :这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证

  4. 其他的拓展属性例如 tokenExtractor 令牌提取器用来提取请求中的令牌。

  • HttpSecurity配置这个与Spring Security类似:
  1. 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。

  2. 通过 http.authorizeRequests()来设置受保护资源的访问规则

  3. 其他的自定义权限保护规则通过 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():是配置访问资源服务时传过来的令牌解析服务,有两种情况:

  1. 资源服务器和认证服务器在一起,这是只需要配置默认的DefaultTokenServices即可,但是要注意必须配置一个TokenStore,即是认证服务器中存储令牌的配置,在本地进行解析验证。

  2. 资源服务器和认证服务器不在一起,如微服务中的单独认证服务器和多个资源服务器,这是我们需要配置远程令牌访问解析服务RemoteTokenServices ,配置token的验证端点/oauth/check_token,最终将其配置到资源服务器。要注意的是,一定要在认证服务器中开启相应的端点:

@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
security
// /oauth/token_key公开
.tokenKeyAccess("permitAll()")
// /oauth/check_token公开
.checkTokenAccess("permitAll()")
.allowFormAuthenticationForClients();
}
  1. 如果是资源服务分离情况下,还需要配置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中规定:

  1. token必须放在Header中
  2. 对应的格式为:token的参数名称为:Authorization,值为:Bearer token值

如果传错误的token

或者不传token

OAuth + Security - 2 - 资源服务器配置的更多相关文章

  1. OAuth + Security -1 - 认证服务器配置

    配置 基础包依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  2. DotNetOpenAuth实践之Webform资源服务器配置

    系列目录: DotNetOpenAuth实践系列(源码在这里) 上篇我们讲到WebApi资源服务器配置,这篇我们说一下Webform下的ashx,aspx做的接口如何使用OAuth2认证 一.环境搭建 ...

  3. DotNetOpenAuth实践之WCF资源服务器配置

    系列目录: DotNetOpenAuth实践系列(源码在这里) 上一篇我们写了一个OAuth2的认证服务器,我们也获取到access_token,那么这个token怎么使用呢,我们现在就来揭开 一般获 ...

  4. OAuth + Security - 3 - JWT令牌

    为什么使用JWT令牌 在上面的资源服务器中,通过配置,我们了解到,当我们拿着token去获取资源时,程序会先去调用远程认证服务器的端点去验证解析token,或者在本地解析校验token,这样毫无疑问, ...

  5. OAuth + Security - 5 - Token存储升级(数据库、Redis)

    PS:此文章为系列文章,建议从第一篇开始阅读. 在我们之前的文章中,我们当时获取到Token令牌时,此时的令牌时存储在内存中的,这样显然不利于我们程序的扩展,所以为了解决这个问题,官方给我们还提供了其 ...

  6. Spring Security 静态资源访问

    在搞 Spring Security 的时候遇到了一个小坑,就是静态资源加载的问题. 当我们继承了 WebSecurityConfigurerAdapter的时候,会去重写几个方法.去设定我们自己要过 ...

  7. Spring Security静态资源访问

    在使用Spring Security时要求所有请求都需要授权访问,此时会定义过滤规则如下 protected void configure(HttpSecurity http) throws Exce ...

  8. springboot配置spring security 静态资源不能访问

    在springboot整合spring security 过程中曾遇到下面问题:(spring boot 2.0以上版本   spring security 5.x    (spring  secur ...

  9. OAuth + Security - 6 - 自定义授权模式

    我们知道OAuth2的官方提供了四种令牌的获取,简化模式,授权码模式,密码模式,客户端模式.其中密码模式中仅仅支持我们通过用户名和密码的方式获取令牌,那么我们如何去实现一个我们自己的令牌获取的模式呢? ...

  10. nginx静态资源服务器配置

    编辑 nginx.conf server { listen 80; server_name file.youxiu326.xin; location /image/ { #访问 file.youxiu ...

随机推荐

  1. 全面提升易用性:OpenClusterManagement 0.7 版本发布

    ​简介:千呼万唤始出来,三月末 OpenClusterManagement 社区正式发布了 v0.7 版本.在新的版本有一系列新的功能特性欢迎感兴趣的读者体验探索,同时在这个版本中社区维护者对目前已有 ...

  2. Android Native crash 处理案例分享

    简介: Android Native crash 处理案例分享 1. 背景 目前 mPaas[1] Android使用Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一 ...

  3. [FAQ] panic: listen tcp :xxxx: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

    在 Go 中运行服务之前的绑定端口这一步,如果端口号被占用了,那么会提示它只能使用一次. 换个端口号或者检查端口号的占用程序. Link:https://www.cnblogs.com/farwish ...

  4. 【Buildroot】使用记录

    一.概述 之前只使用过 busybox,每次配置完 roots 文件时,只具备一些基础的工具,像移植 QT 之类的就显得很麻烦.直到现在接触到了 Buildroot,才发现配置工具可以这么简单,对于自 ...

  5. 本地git用cmd窗口提交时编辑模式退出问题

    git commit后输入提交描述. 输入完成后按Esc (退出编辑状态),接着连按两次大写字母Z,就保存好退出了.

  6. 2021~2022Apache大数据相关项目盘点

    一.晋升为Apache TLP(Top-Level Project)的大数据相关项目 1.1.Apache DataSketches (20210203) 1.2.Apache Gobblin (20 ...

  7. Plumed分子模拟后分析

    技术背景 在前面的几篇博客中,我们分别介绍过Histogram算法的使用.Plumed安装与简单使用.Plumed一般就是两种用法:要么在运行分子动力学模拟的过程中实时的对接,要么就是把分子模拟的相关 ...

  8. C#使用MX Component实现三菱PLC软元件数据采集的完整步骤(仿真)

    前言 本文介绍了如何使用三菱提供的MX Component插件实现对三菱PLC软元件数据的读写,记录了使用计算机仿真,模拟PLC,直至完成测试的详细流程,并重点介绍了在这个过程中的易错点,供参考. 用 ...

  9. OpenCV计算机视觉入门之图像色彩空间转换

    目录 1. 引言 2. 概念 2.1 数字图像 2.2 色彩空间 3. 实践-图像读取 5. 完整代码 6. 总结 1. 引言 本文通过导入函数库.读取图像.转换图像色彩空间.缩放图像和保存图像五个步 ...

  10. Teamviewer 再次涨价,太贵了,有没有平替软件?

    今天打开 Teamviewer 网站,吓一跳,商业版基础款价格直接翻倍. 作为行业龙头,又是德国产品,Teamviewer 一直保持着高价格的特色.这两年 Teamviewer 的价格还逐年上涨,从每 ...