Spring Boot 3.2.2中OAuth2客户端与资源服务依赖差异及适用场景
OAuth2 Client与Resource Server依赖区别及配置参数适用场景
Spring Boot版本:3.2.2
一、两个Starter依赖的核心区别与适用场景
1. spring-boot-starter-oauth2-client
这个服务于OAuth2客户端角色,适用于以下场景:
- 你的服务需要作为客户端,通过授权码模式引导用户跳转到Keycloak完成登录,获取令牌后访问自身或第三方资源;
- 你的服务需要用客户端凭证模式主动向Keycloak申请令牌,用于调用其他受保护的服务;
- 任何需要服务主动发起OAuth2授权流程、获取令牌的场景。
2. spring-boot-starter-oauth2-resource-server
这个服务于资源服务器角色,适用于以下场景:
- 你的服务对外提供API接口,需要验证请求中携带的JWT令牌合法性;
- 仅负责校验令牌有效性,不参与主动获取令牌的流程;
- 像你这样,用Keycloak处理Token交互,自身项目实现角色权限控制的场景,只需要这个依赖就足够。
二、spring.security.oauth2.client配置参数的适用场景
你之前在Spring Boot 2.7.4中配置的一系列spring.security.oauth2.client.xxx参数,全部是为oauth2-client依赖服务的,具体适用场景:
当你的服务需要作为OAuth2客户端,采用授权码模式对接Keycloak时,必须配置这些参数:
registration.keycloak下的client-id、client-secret、redirect-uri等:告知Spring Security你的客户端身份信息,以及授权成功后的回调地址;provider.keycloak下的authorization-uri、token-uri、jwk-set-uri等:指定Keycloak的OIDC服务端点,让客户端知道去哪里发起授权、获取令牌、校验令牌签名。
你升级到3.2.2后无需这些配置就能验证Token的原因:
你的代码中通过JwtDecoders.fromIssuerLocation("http://keycloak.payment/payment-realm")创建了解码器,这个方法会自动利用OIDC的自动发现机制,去Keycloak的.well-known/openid-configuration端点获取JWKS等校验所需的信息,无需手动配置参数。
三、结合你的场景总结
- 你当前仅需保留
spring-boot-starter-oauth2-resource-server依赖:因为你的服务只是资源服务器,仅需校验Keycloak签发的Token,不需要作为客户端主动获取令牌; - 那些
spring.security.oauth2.client配置参数,只有当你的服务需要作为OAuth2客户端(比如实现用户登录跳转、主动调用其他受保护服务)时,才需要配置; - 你的
JwtAuthenticationManagerResolver实现已经完成了Token校验的核心逻辑,配合Resource Server依赖就能满足需求。
内容的提问来源于stack exchange,提问作者kernel
相关产品推荐
相关产品推荐

