spring boot 通过 spring security 实现无状态 oauth2 鉴权,需禁用 session、启用资源服务器、配置 jwt 校验(jwk uri 或对称密钥),并自定义权限映射与 json 异常响应。

Spring Boot 通过 Spring Security 实现无状态 OAuth2 鉴权,核心是把认证逻辑从传统 Session 模式切换为 Token 驱动、不依赖服务端会话的模式。关键在于:禁用 Session、启用资源服务器能力、配置 Token 校验方式(远程或本地),并确保所有安全链路符合 RESTful 原则。
明确角色与依赖选型
先确认你构建的是哪类服务:
- 如果是资源服务器(只验证 Token、不发 Token),用
spring-boot-starter-oauth2-resource-server - 如果是授权服务器(颁发 Token),用
spring-boot-starter-oauth2-authorization-server(Spring 官方推荐,替代已停更的spring-security-oauth2) - 不要混用旧版
spring-cloud-starter-oauth2或@EnableResourceServer—— 它们在 Spring Security 5.7+ 中已被废弃
配置无状态资源服务器(推荐方式)
以 JWT 为例,只需在 application.yml 中声明公钥或 JWK Set URI,并启用资源服务器自动配置:
- 若使用自签名 JWT,配置公钥路径:
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://auth.example.com/.well-known/jwks.json - 若用对称密钥(仅开发测试),配置:
spring.security.oauth2.resourceserver.jwt.issuer-uri=https://auth.example.comspring.security.oauth2.resourceserver.jwt.secret=your-secret-key - 确保 HTTP 层禁用 Session:
http.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
定制鉴权规则与权限提取
Token 中的权限(如 scope 或 authorities)需映射到 Spring Security 的 GrantedAuthority:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 默认会读取 JWT 的
scope或scp字段,转为SCOPE_read、SCOPE_write等权限 - 若用自定义字段(如
roles),需配置JwtAuthenticationConverter:
示例 Java 配置:
@Bean<br>public JwtAuthenticationConverter jwtAuthenticationConverter() {<br> JwtGrantedAuthoritiesConverter grantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();<br> grantedAuthoritiesConverter.setAuthoritiesClaimName("roles");<br> grantedAuthoritiesConverter.setAuthorityPrefix("");<br> JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();<br> jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(grantedAuthoritiesConverter);<br> return jwtAuthenticationConverter;<br>}
保护 API 路径与处理未授权响应
在 SecurityFilterChain 中声明访问控制策略,并统一返回 JSON 错误而非跳转登录页:
- 允许公开接口:
.requestMatchers("/api/public/**").permitAll() - 按权限限制:
.requestMatchers("/api/admin/**").hasAuthority("ADMIN") - 禁用 CSRF(REST API 不适用):
.csrf(csrf -> csrf.disable()) - 覆盖默认异常响应:添加
BearerTokenAuthenticationEntryPoint和BearerTokenResolver可定制 401/403 返回格式
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










