当前位置: 首页 > news >正文

Spring Security OAuth2.0(18):资源服务测试

本章代码已分享至Gitee:https://gitee.com/lengcz/distributed-security01.git

文章目录

  • 资源服务器配置
  • 编写资源
  • 配置资源服务
  • 验证token
  • 添加安全访问控制
  • 查看令牌权限
  • 问题

资源服务器配置

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

  • tokenServices: ResourceServerTokenServices类的实例,用来实现令牌服务。
  • tokenStore:TokenStore类的实例,指定令牌如何访问,与tokenServices配置可选
  • resourceId:这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证。
  • 其他的扩展属性例如tokenExtrator令牌提取器用来提取请求中的令牌。

HttpSecurity配置这个与Spring Security 类似:

  • 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。
  • 通过http.authorizeRequests()来设置受保护的访问规则
  • 其他的自定义权限保护规则通过HttpSecurity来进行配置。

@EnableResourceServer 注解自动增加了一个类型为OAuth2AuthenticationProcessingFilter的过滤器链。

编写资源

在order模块下创一个资源

@RestControllerpublicclassOrderController{@GetMapping("r1")@PreAuthorize("hasAnyAuthority('p1')")// 拥有p1权限可以访问此资源publicStringr1(){return"资源1";}}

配置资源服务

在order模块下,创建配置 ResourceServerConfig

packagecom.it2.security.distributed.order.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security.config.http.SessionCreationPolicy;importorg.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;importorg.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;importorg.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;importorg.springframework.security.oauth2.provider.token.RemoteTokenServices;importorg.springframework.security.oauth2.provider.token.ResourceServerTokenServices;@Configuration@EnableResourceServerpublicclassResourceServerConfigextendsResourceServerConfigurerAdapter{publicstaticfinalStringRESOURCE_ID="res1";@Overridepublicvoidconfigure(ResourceServerSecurityConfigurerresources)throwsException{resources.resourceId(RESOURCE_ID)//资源id.tokenServices(tokenService())//验证令牌的服务.stateless(true);}@Overridepublicvoidconfigure(HttpSecurityhttp)throwsException{http.authorizeRequests().antMatchers("/**").access("#oauth2.hasScope('all')").and().csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);}}

验证token

ResourceServerTokenServices 是组成授权服务的另一半,如果你的授权服务器和资源服务在同一个应用程序的话,你可以使用DefaultTokenServices,这样的话,你就不用考虑关于实现所有必要接口的接口的一致性问题。如果你的资源服务器是分离开的,那么你就需必须确保能够有匹配授权服务提供的ResourceServerTokenServices,它知道如何对令牌进行解码。

令牌解析方法:
使用DefaultTokenServices 在资源服务器本地配置令牌存储,解码,解析方式
使用RemoteTokenServices 资源服务器通过HTTP 请求来解码令牌,每次都请求授权服务器端点/oauth/check_token

使用授权服务的/oauth/check_token 端点你需要在授权服务将这个端点暴露出去,以便资源服务可以进行访问,这在授权服务配置中提到过,下面是一个例子,已经在授权中配置了 /oauth/check_token和/oauth/token_key这两个端点

@Overridepublicvoidconfigure(AuthorizationServerSecurityConfigurersecurity)throwsException{security.tokenKeyAccess("permitAll()")//oauth/token_key 公开.checkTokenAccess("permitAll()")//oauth/check_token 公开.allowFormAuthenticationForClients();//表单认证,申请令牌}

添加安全访问控制

*必须配置HttpSecurity ,否则会导致没有该资源权限也能访问。

在order的config下添加安全访问控制

importorg.springframework.context.annotation.Configuration;importorg.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration@EnableGlobalMethodSecurity(securedEnabled=true,prePostEnabled=true)//开启不同的方法权限注解publicclassWebSecurityConfigextendsWebSecurityConfigurerAdapter{//配置安全拦截机制protectedvoidconfigure(HttpSecuritysecurity)throwsException{security.csrf().disable().authorizeRequests().antMatchers("/r/**").authenticated()//所有的/r/**的请求必须认证通过.anyRequest().permitAll();//除此之外的请求,都可以访问}}

查看令牌权限

http://localhost:53020/uaa/oauth/check_token

问题

这种方式的缺点:每次请求进行鉴权时,都需要请求远程接口,请求量大时,这种网络请求将会占用大量网络资源。

http://www.jsqmd.com/news/1220611/

相关文章:

  • 2026惠州惠阳黄金奢侈品回收店测评:惠奢汇(惠阳店)领衔5家靠谱门店,资质/价格/服务全解析 - 生活测评小能手
  • 深圳黄金回收避坑指南!这6家宝藏店铺覆盖全市,高价透明秒到账 - 新芸鼎珠宝首饰
  • 豆包视频去水印怎么操作?实测这几个工具哪个好 - 科技热点发布
  • AI工程化开发工具Superpowers在RBAC系统中的应用
  • AM64x/AM243x嵌入式系统启动引导全解析:SPI、I2C、SD卡与网络启动实战
  • 解决macOS 11安装Python难题:asdf-python补丁功能完全指南 [特殊字符]
  • Vineyard视频卡片预览功能:PreviewCardView与VideoCardView交互设计
  • 浏览器资源嗅探技术深度解析:猫抓插件的架构与应用实践
  • Linux 内核 Ftrace 在嵌入式驱动调试中的应用:function_graph 追踪中断延迟的深入实践
  • 鸿蒙原生开发手记:徒步迹 - 离线数据同步策略
  • 如何掌握node-jsonc-parser高级用法:AST操作与动态JSON修改终极指南
  • 九、Flume 原理与常见应用场景
  • 抖音保存的视频怎样才能没水印?手机电脑在线都能用的工具有哪些 - 科技热点发布
  • 豆包即梦图片水印如何去除,手机端工具实测盘点 - 科技热点发布
  • 宁德黄金回收门店深度测评|2026本地人靠谱变现避雷指南 - 小路路在天舞
  • 【权威实测】2024年免费AI编程模型能力排行榜TOP5:基于代码生成准确率(89.7%)、注释理解深度(Llama-3-8B vs Qwen2.5-Coder)、本地部署可行性三维打分
  • 瑞德克斯平台:聚焦细节,看看外汇行情信息呈现的关键标准
  • 每日极客日报 · 2026年07月19日
  • 10分钟上手Traquer:从安装到录制的完整入门教程
  • 免费AI编程助手谁更强?5大主流工具真实场景编码效率、错误率、上下文理解力横向测评(含IDE集成体验)
  • 鸿蒙原生开发手记:徒步迹 - 位置权限申请与管理
  • Kimera-Semantics 实战:在Euroc数据集上运行语义重建的完整流程
  • Lyric-Getter社区贡献指南:如何提交代码和功能建议
  • 视频号无保存按钮怎么下载?如何下载视频号的视频到手机相册2026 - 科技热点发布
  • Unity响应式编程R3入门:从安装到实战应用
  • 黔东南防水修缮优选|筑宅安99.5高分五星品牌,专治梅雨季各类漏水难题 - 筑宅安
  • 2026青岛市家里卫生间漏水、阳台漏水、楼顶漏水、地下室渗水、阳光房漏水哪家防水公司做的好!核心靠谱公司推荐 - 吉林同城获客
  • Python数据结构:面试官问“为什么用dict而不是list”,别只说“dict快”
  • XXMI启动器:一站式游戏模组管理平台的终极指南
  • Bloom架构深度剖析:Rust实现的高性能反向代理核心原理