Spring Boot 2.x实战84 - Spring Security 8 - OAuth 2.0之Resource Server(基于JWT)

OAuth 2.0是安全授权的工业标准协议,我们了解它需要理解下面的专用术语:

  • 交互参与方:

    • Client:需要访问Resource Sever受保护资源的应用;
    • Resource Owner :终端用户,Client通过终端用户进行不同类型的授权(Grant Type);
    • Authorization Server:提供访问授权的应用,Client使用某种Grant TypeAuthorization Server获取Access Token
    • Resource Sever:包含受保护资源的应用,Client使用Access Token访问Resource Server的受保护资源;
  • 授权类型 - Grant Type

    • Authorization Code:让用户访问Client页面时,页面打向Authorization Server的登录页面,登录后显示授权访问页面,授权成功后Client即可获得Access Token访问Resource Server
    • Password:通过提供提供用户名和密码获得Access Token,一般是给应用服务的客户端使用(IOS、Android、Web App)。
    • Client Credentials:Client通过Client Id和Client Secret直接向Authorization Server请求Access Token;它主要用于非用户参与的应用,如后台服务。
  • Token

    • Access Token:用来访问受保护资源的唯一令牌;
    • Refresh Token:当Access Token失效时,我们可以使用Refresh Token来获取一个新的Access Token,它的时效性要远远大于Access Token
    • JWT:JSON Web Token,它代表双方之间安全传输的信息;它使用数字签名,传输的信息可以被验证和信任。
3.2 OAuth 2.0 Resource Server

新建应用,信息如下:

Group:top.wisely

Artifact:resource-server

Dependencies:Spring SecurityOAuth2 Resource ServerSpring Web StarterLombok

build.gradle文件中的依赖如下:

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
  //...
}
3.2.1 Spring Boot的自动配置

Spring Boot使用OAuth2ResourceServerJwtConfigurationResource Server做了自动配置,它使用OAuth2ResourceServerProperties通过spring.security.oauth2.resourceserver.*进行配置。OAuth2ResourceServerJwtConfiguration导入了两个配置:

  • OAuth2ResourceServerJwtConfiguration:配置JWT Token解码的JwtDecoder

    • 使用Authorization Server的 JWK Set URI端点进行解码,使用spring.security.oauth2.resourceserver.jwt.jwk-set-uri配置;
    • 使用Authorization Server的keyStore的公钥进行解码,使用spring.security.oauth2.resourceserver.jwt.public-key-location配置;
  • OAuth2ResourceServerWebSecurityConfiguration:常规的Spring Security配置,使用HttpSecurity配置Resource Server和JWT:

    @Configuration(proxyBeanMethods = false)
    @ConditionalOnBean(JwtDecoder.class)
    static class OAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
         
         
    
       @Override
       protected void configure(HttpSecurity http) throws Exception {
         
         
          http.authorizeRequests().anyRequest().authenticated().and()
                .oauth2ResourceServer().jwt();
       }
    
    }
    
3.2.1 方式1:JWK Set路径配置

我们可以通过在Resource Server中设置JWK Set路径解码JWT Token。

3.2.1.1 Authorization Server的修改

我们对JWT的操作依赖于nimbus包,需添加依赖:

implementation 'com.nimbusds:nimbus-jose-jwt:7.0.1'

Resource Server端已通过spring-boot-starter-oauth2-resource-server自动依赖。

使用JWK Set URI需Authorization Server提供支持,我们需要在Authorization Server上添加端点:

@FrameworkEndpoint //1
public class 
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络中的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络中的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值