Spring OAuth2 Resource Server 配置

news/2024/6/20 19:24:54/文章来源:https://blog.csdn.net/semicolon_hello/article/details/137147058

Spring OAuth2 Resource Server 是 Spring Security 中的一个模块,用于保护资源服务器上的API资源,确保只有持有合法访问令牌(access token)的客户端才能访问受保护的资源。以下是一个简化的Spring Boot应用中如何配置OAuth2 Resource Server的基本步骤和示例:

依赖引入

首先,在pom.xmlbuild.gradle中引入相应的依赖:

<!-- Maven -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency><!-- Gradle -->
dependencies {implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
}

配置资源服务器

使用JWT令牌验证

如果你的Authorization Server使用的是JWT令牌,则需要配置资源服务器来验证这种令牌:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator;
import org.springframework.security.oauth2.core.OAuth2Error;
import org.springframework.security.oauth2.jose.jws.JwsAlgorithms;
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.security.oauth2.jwt.JwtValidators;
import org.springframework.security.oauth2.jwt.NimbusJwtDecoder;import java.util.Arrays;@Configuration
@EnableWebSecurity
public class ResourceServerConfig extends WebSecurityConfigurerAdapter {@Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")private String issuerUri;@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().oauth2ResourceServer().jwt().decoder(jwtDecoder()).jwtAuthenticationConverter(jwtAuthenticationConverter());}// 创建JWT解码器private JwtDecoder jwtDecoder() {NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withJwkSetUri(issuerUri).build();jwtDecoder.setJwtValidator(new DelegatingOAuth2TokenValidator<>(Arrays.asList(JwtValidators.createDefaultWithIssuer(issuerUri),new CustomJwtValidator() // 如果有自定义验证逻辑,可以添加自定义验证器)));return jwtDecoder;}// 自定义JWT转换器(如有必要)private Converter<Jwt, ? extends AbstractAuthenticationToken> jwtAuthenticationConverter() {JwtAuthenticationConverter converter = new JwtAuthenticationConverter();// 可能需要映射JWT声明到角色或其他属性OAuth2AuthenticatedPrincipal authoritiesExtractor = new AuthoritiesExtractor();converter.setJwtAuthoritiesConverter(authoritiesExtractor);return converter;}// 示例自定义验证器private static class CustomJwtValidator implements OAuth2TokenValidator<Jwt> {@Overridepublic OAuth2TokenValidatorResult validate(Jwt jwt) {// 这里添加额外的JWT验证逻辑// ...return OAuth2TokenValidatorResult.success(); // 如果验证成功}}// 示例JWT声明转角色的提取器private static class AuthoritiesExtractor implements Converter<Jwt, Collection<GrantedAuthority>> {@Overridepublic Collection<GrantedAuthority> convert(Jwt jwt) {// 从JWT声明中获取角色并转换成GrantedAuthority对象// ...return Arrays.asList(new SimpleGrantedAuthority("ROLE_USER")); // 示例}}
}
使用opaque令牌验证

如果使用的是opaque类型的访问令牌,则通常需要配置远程Token服务来验证:

// 配置opaque令牌验证
private RemoteTokenServices tokenService() {RemoteTokenServices tokenService = new RemoteTokenServices();tokenService.setCheckTokenEndpointUrl("http://auth-server/oauth/check_token");tokenService.setClientId("your-client-id");tokenService.setClientSecret("your-client-secret");return tokenService;
}// 在configure(HttpSecurity)方法中添加配置
.and()
.oauth2ResourceServer()
.authenticationManager(new DefaultOAuth2AuthenticationManager(tokenService()));

注意事项

  • issuer-uri应该指向颁发JWT的Authorization Server的公共元数据URI,以便下载公钥进行验证。

  • 对于opaque令牌,配置RemoteTokenServices时需要替换为实际的检查令牌端点URL、客户端ID和客户端密钥。

  • 上述示例仅作演示用途,实际配置需根据具体的Authorization Server配置和需求调整。

  • JwtAuthenticationConverter用于将JWT中的声明转换为Spring Security可以识别的角色或其他权限信息。

务必按照您的OAuth2授权服务器的具体要求来适配上述配置。在现代应用中,尤其是采用OpenID Connect协议的场景下,使用JWT令牌并验证其签名及标准声明已经成为主流做法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1034731.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CQI-17:2021 V2 英文 、中文版。特殊过程:电子组装制造-锡焊系统评审标准

锡焊作为一个特殊的工艺过程&#xff0c;由于其材料特性的差异性、工艺参数的复杂性和过程控制的不确定性&#xff0c;长期以来一直视为汽车零部件制造业的薄弱环节&#xff0c;并将很大程度上直接导致整车产品质量的下降和召回风险的上升。 美国汽车工业行动集团AIAG的特别工…

AWS创建IAM用户,以及通过IAM用户登录

基本概念&#xff1a; IAM Identity Center&#xff08;AWS SSO&#xff09; 跨账户访问&#xff1a;IAM Identity Center允许用户使用他们自己的单一登录凭证来访问多个AWS账户和应用程序。这意味着你可以拥有一个账户和密码&#xff0c;通过IAM Identity Center的用户门户&…

Linux_进程的优先级环境变量上下文切换

文章目录 一、进程的优先级二、进程的四个重要概念三、上下文切换四、环境变量4.1 查看当前shell环境下的环境变量与内容 一、进程的优先级 什么是优先级&#xff1f; 指定一个进程获取某种资源的先后顺序本质是进程获取cpu资源的优先顺序 为什么要有优先级 进程访问的资源&am…

基于单片机和PCF8591波形发生器可调系统设计

**单片机设计介绍&#xff0c;基于单片机和PCF8591波形发生器可调系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机和PCF8591的波形发生器可调系统设计是一个结合了硬件与软件技术的综合性项目。这种设计旨在通…

VXLAN技术解析

什么是VXLAN VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;&#xff0c;是由IETF定义的NVO3&#xff08;Network Virtualization over Layer 3&#xff09;标准技术之一&#xff0c;是对传统VLAN协议的一种扩展。VXLAN的特点…

Python快速入门系列-8(Python数据分析与可视化)

第八章:Python数据分析与可视化 8.1 数据处理与清洗8.1.1 数据加载与查看8.1.2 数据清洗与处理8.1.3 数据转换与整理8.2 数据可视化工具介绍8.2.1 Matplotlib8.2.2 Seaborn8.2.3 Plotly8.3 数据挖掘与机器学习简介8.3.1 Scikit-learn8.3.2 TensorFlow总结在本章中,我们将探讨…

史上最强 PyTorch 2.2 GPU 版最新安装教程

一 深度学习主机 1.1 配置 先附上电脑配置图&#xff0c;如下&#xff1a; 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源&#xff0c;其他硬件都是公司电脑原装。 1.2 显卡 有钱直接上 RTX4090&#xff0c;也不能复用公司的电脑&#xff0c;其他配置跟不上。…

势拓伺服科技将莅临2024年第13届生物发酵展

参展企业介绍 厦门势拓伺服科技股份有限公司是福建省冶金(控股)有限责任公司的控股子公司&#xff0c;厦门钨业股份有限公司参股&#xff0c;是厦钨永磁电机产业园的主体之一。公司专业从事永磁同步电机的研发、设计与制造及电机的配套及延伸产业。 公司生产的永磁同步电机包括…

Transformer - 掩码张量

Transformer - 掩码张量 flyfish 在编写注意力函数时&#xff0c;其中之一参数为掩码张量mask attention(query, key, value, maskmask)先看一个函数np.triu import numpy as npsize 10 attn_shape (1, size, size)subsequent_mask np.triu(np.ones(attn_shape), k0).asty…

3.6k star, 免费开源跨平台的数据库管理工具 dbgate

3.6k star, 免费开源跨平台的数据库管理工具 dbgate 分类 开源分享 项目名: dbgate -- 免费开源跨平台的数据库管理工具 Github 开源地址&#xff1a; GitHub - dbgate/dbgate: Database manager for MySQL, PostgreSQL, SQL Server, MongoDB, SQLite and others. Runs under…

TRL校准的解析计算过程

目录 0 引言 1 信号流图 2 信号流图的分解 3 TRL校准的解析 4 仿真验证 5 总结 参考文献 0 引言 矢量网络分析仪(VNA)通常被校准到它们自己的参考平面上,但是,由于测量夹具以及线缆等的使用,这些参考平面通常不同于待测件(DUT)的参考平面,而这些连接装置,例如射…

Redis 的慢日志

Redis 的慢日志 Redis 的慢日志&#xff08;Slow Log&#xff09;是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈&#xff0c;定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…

在jsp文件内使用jdbc报错

使用idea创建javaweb项目后&#xff0c;在jsp文件内使用jdbc连接数据库错误&#xff0c;显示以下内容&#xff1a; java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriverat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappCl…

【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(49)

1. 题目解析 题目链接&#xff1a;63. 不同路径 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题就像是在一个迷宫中找路&#xff0c;只不过这个迷宫有些格子是不能走的&#xff0c;也就是那些“障碍物”。…

SAD法(附python实现)和Siamese神经网络计算图像的视差图

1 视差图 视差图&#xff1a;以左视图视差图为例&#xff0c;在像素位置p的视差值等于该像素在右图上的匹配点的列坐标减去其在左图上的列坐标 视差图和深度图&#xff1a; z f b d z \frac{fb}{d} zdfb​ 其中 d d d 是视差&#xff0c; f f f 是焦距&#xff0c; b b…

二十四种设计模式与六大设计原则(二):【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点

接上次博客&#xff1a;二十四种设计模式与六大设计原则&#xff08;一&#xff09;&#xff1a;【策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 门面模式【Facade Pattern】 定义 举…

2024年全新靠谱的FTP替代升级解决方案

随着企业规模的扩大和业务的多元化&#xff0c;传统的TCP协议在数据传输效率上逐渐显现出局限性。TCP协议虽然以其稳定性和可靠性被广泛应用&#xff0c;但在面对大规模数据传输时&#xff0c;其性能瓶颈逐渐成为企业发展的阻碍。同时&#xff0c;基于TCP的应用协议如Telnet、F…

HarmonyOS 应用开发之通过数据管理服务实现数据共享静默访问

场景介绍 典型跨应用访问数据的用户场景下&#xff0c;数据提供方会存在多次被拉起的情况。 为了降低数据提供方拉起次数&#xff0c;提高访问速度&#xff0c;OpenHarmony提供了一种不拉起数据提供方直接访问数据库的方式&#xff0c;即静默数据访问。 静默数据访问通过数据…

淘宝店铺如何从1688一键铺货?官方授权接口,可满足多样化上货需求

此API目前支持以下基本接口&#xff1a; item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品&#xff08;拍立淘&#xff09;item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得…

用于AGV物流机器人的爱普生陀螺仪传感器XV7000系列

适用于AGV物流机器人的爱普生陀螺仪传感器XV7000系列:XV7001BB&#xff0c;XV7011BB。以前我们都知道XV7001BB&#xff0c;XV7011BB适用于扫地机器人&#xff0c;其实对于AGV物流机器人来说&#xff0c;XV7000系列生陀螺仪传感器也是其中重要一环。AGV机器人又叫做AGV搬运机器人…