Spring spring

Spring中文网站 > Spring Security > Spring Security如何整合 OAuth2 Springsecurity和oauth2的依赖有哪些
Spring Security如何整合 OAuth2 Springsecurity和oauth2的依赖有哪些
发布时间:2026/02/08 11:14:10

  把Spring Security和OAuth2整合起来,先要分清你在OAuth2体系里扮演的角色,是做OAuth2 Login的客户端,还是做校验令牌的资源服务器,还是要自己搭授权服务器。角色选对了,依赖与配置就会很清晰,后续联调也更容易定位是注册信息、回调地址还是令牌校验链路的问题。

  一、Spring Security如何整合OAuth2

 

  整合这件事建议按场景拆开做,不要一开始就把登录、发令牌、验令牌全堆到一个应用里。你先选一个最小闭环,例如先做OAuth2 Login或先做资源服务器校验JWT,把链路跑通,再补权限映射与细粒度鉴权。

 

  1、先确认你要实现的OAuth2角色

 

  如果你要做第三方登录与单点登录入口,优先走OAuth2 Client加OAuth2 Login这条线;如果你是API服务只需要校验Bearer Token,优先走OAuth2 Resource Server;如果你要自己发放令牌并管理客户端注册,才需要Spring Authorization Server。

 

  2、用Spring Boot方式优先走Starter

 

  在Spring Boot里整合OAuth2,优先用Starter而不是手动拼一堆底层模块,这样依赖版本与自动装配更一致,减少类冲突与配置漏项的概率。

 

  3、OAuth2 Login的最小链路先跑通回调

 

  用OAuth2 Login时,重点是注册信息与回调地址一致,配置里要有registrationId、client-id、client-secret等注册信息,并确保redirect-uri与提供方控制台配置一致,先让授权码流程能回到你的应用。

 

  4、资源服务器先用issuer-uri或jwk-set-uri把JWT验通

 

  资源服务器场景下,先把spring.security.oauth2.resourceserver.jwt.issuer-uri或jwk-set-uri配置好,让服务端能按元数据或JWK公钥集合完成验签,再做权限映射与细粒度授权。

 

  5、不要再用旧的Spring Security OAuth体系做新系统

 

  老的Spring Security OAuth与OAuth2 Boot自动配置属于历史迁移桥接路线,官方明确已由Spring Security的Client与Resource Server能力以及Spring Authorization Server替代,新系统尽量不要再引入旧依赖,避免后期安全修复与升级节奏被拖慢。

 

  二、Spring Security和OAuth2的依赖有哪些

 

  依赖清单要按你选择的角色来列,否则很容易出现引了很多包但只用到一小部分,还增加冲突风险。常见做法是让Spring Boot的依赖管理接管版本,你只声明Starter坐标即可。

 

  1、基础安全依赖

 

  通用前置依赖通常是groupId为org.springframework.boot,artifactId为spring-boot-starter-security,用于启用Spring Security基础能力,再按场景叠加OAuth2相关Starter。

 

  2、OAuth2 Client与OAuth2 Login相关依赖

 

  做第三方登录与客户端能力时,常用groupId为org.springframework.boot,artifactId为spring-boot-starter-oauth2-client,它覆盖OAuth2 Client与OpenID Connect客户端常用能力,并与Spring Security的OAuth2 Login配置相匹配。

  3、OAuth2资源服务器相关依赖

 

  做Bearer Token校验时,常用groupId为org.springframework.boot,artifactId为spring-boot-starter-oauth2-resource-server,用于启用资源服务器能力,并支持JWT与不透明令牌两类校验路径。

 

  4、搭建授权服务器相关依赖

 

  需要自建授权服务器时,Spring Boot参考文档给出了groupId为org.springframework.boot,artifactId为spring-boot-starter-oauth2-authorization-server的Starter,同时底层核心库坐标为groupId为org.springframework.security,artifactId为spring-security-oauth2-authorization-server。

 

  5、Web栈依赖按你选的运行模型补齐

 

  如果你是传统Servlet栈接口服务,通常还会使用groupId为org.springframework.boot,artifactId为spring-boot-starter-web;如果你是响应式栈,则用spring-boot-starter-webflux,并对应采用Spring Security的Reactive OAuth2配置入口,避免把两套栈混用导致过滤链不生效。

 

  6、版本管理的口径

 

  推荐让Spring Boot的BOM统一管理版本,不要在每个依赖上单独写版本号,尤其是安全相关依赖,避免出现同一组组件版本不一致导致的启动失败或运行期方法缺失。

 

  三、OAuth2三种角色的实施顺序

 

  把实施顺序固定下来,整合会轻很多,特别是在你需要同时支持网页登录与API访问的场景。建议先跑通一条最短链路,再扩展到权限模型与多应用接入,避免一开始就把所有功能点同时上线。

 

  1、先做资源服务器验令牌

 

  先用spring-boot-starter-oauth2-resource-server把JWT校验跑通,验证issuer-uri或jwk-set-uri可用,并确保未认证请求返回符合你的接口规范,然后再加基于scope或authority的访问控制。

 

  2、再做OAuth2 Login或OAuth2 Client调用

 

  如果你有后台管理端或需要用户登录态,再引入spring-boot-starter-oauth2-client,先用单一提供方跑通授权码回调,再扩展多提供方与自定义用户信息映射,确保账号体系能落到你自己的用户表或统一身份源。

 

  3、最后再考虑自建授权服务器

 

  只有在你明确需要自签发令牌、统一管理客户端注册、做内部多系统单点与授权时,才引入Spring Authorization Server,把授权端点、客户端注册与密钥管理做成独立服务,并让资源服务器按元数据与JWK完成验签。

 

  4、联调时优先抓回调与元数据

 

  登录链路重点看redirect-uri与注册信息是否一致,资源服务器重点看issuer元数据与jwks_url是否可访问,先把这些基础点对齐,再谈权限映射与业务接口保护范围。

 

  5、把旧依赖清理干净再升级

 

  如果历史系统用过spring-security-oauth或spring-security-oauth2-boot,迁移时要先把旧依赖完整移除,再按Client、Resource Server、Authorization Server三块重新组装,避免同名类与自动装配并存导致行为不可控。

  总结

 

  Spring Security整合OAuth2,关键是先选准角色,再用Spring Boot的Starter把最小链路跑通,随后按资源服务器、客户端登录、自建授权服务器的顺序逐步扩展。依赖层面优先使用spring-boot-starter-oauth2-client、spring-boot-starter-oauth2-resource-server与spring-boot-starter-oauth2-authorization-server,并让Spring Boot依赖管理统一版本,尽量避免引入已被替代的旧OAuth2体系依赖。

读者也访问过这里:
180 1563 6924