🔒重构bearer token 抽取过程,带token 就鉴权,即使是暴露的端点

(cherry picked from commit ffafe70bef3777664cc87edd1c58436763930ca3)
This commit is contained in:
冷冷 committed 2024-08-16 15:17:26 +08:00
1 parent cdac9cab16
commit ba15cf45cc
2 files changed
+46 -41

No files matched your search

@@ -23,6 +23,8 @@ import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
import org.springframework.security.oauth2.server.resource.web.DefaultBearerTokenResolver;
/**
* @author lengleng
@@ -32,45 +34,51 @@ import org.springframework.security.oauth2.server.resource.introspection.OpaqueT
@EnableConfigurationProperties(PermitAllUrlProperties.class)
public class PigxResourceServerAutoConfiguration {
/**
* 鉴权具体的实现逻辑
* @return (#pms.xxx)
*/
@Bean("pms")
public PermissionService permissionService() {
return new PermissionService();
}
/**
* 鉴权具体的实现逻辑
*
* @return (#pms.xxx)
*/
@Bean("pms")
public PermissionService permissionService() {
return new PermissionService();
}
/**
* 请求令牌的抽取逻辑
* @param urlProperties 对外暴露的接口列表
* @return BearerTokenExtractor
*/
@Bean
public PigxBearerTokenExtractor pigBearerTokenExtractor(PermitAllUrlProperties urlProperties) {
return new PigxBearerTokenExtractor(urlProperties);
}
/**
* 请求令牌的抽取逻辑
*
* @return BearerTokenExtractor
*/
@Bean
public BearerTokenResolver pigBearerTokenExtractor() {
DefaultBearerTokenResolver defaultBearerTokenResolver = new DefaultBearerTokenResolver();
defaultBearerTokenResolver.setAllowUriQueryParameter(true);
defaultBearerTokenResolver.setAllowFormEncodedBodyParameter(true);
return defaultBearerTokenResolver;
}
/**
* 资源服务器异常处理
* @param objectMapper jackson 输出对象
* @param securityMessageSource 自定义国际化处理器
* @return ResourceAuthExceptionEntryPoint
*/
@Bean
public ResourceAuthExceptionEntryPoint resourceAuthExceptionEntryPoint(ObjectMapper objectMapper,
MessageSource securityMessageSource) {
return new ResourceAuthExceptionEntryPoint(objectMapper, securityMessageSource);
}
/**
* 资源服务器异常处理
*
* @param objectMapper jackson 输出对象
* @param securityMessageSource 自定义国际化处理器
* @return ResourceAuthExceptionEntryPoint
*/
@Bean
public ResourceAuthExceptionEntryPoint resourceAuthExceptionEntryPoint(ObjectMapper objectMapper,
MessageSource securityMessageSource) {
return new ResourceAuthExceptionEntryPoint(objectMapper, securityMessageSource);
}
/**
* 资源服务器toke内省处理器
* @param authorizationService token 存储实现
* @return TokenIntrospector
*/
@Bean
public OpaqueTokenIntrospector opaqueTokenIntrospector(OAuth2AuthorizationService authorizationService) {
return new PigxCustomOpaqueTokenIntrospector(authorizationService);
}
/**
* 资源服务器toke内省处理器
*
* @param authorizationService token 存储实现
* @return TokenIntrospector
*/
@Bean
public OpaqueTokenIntrospector opaqueTokenIntrospector(OAuth2AuthorizationService authorizationService) {
return new PigxCustomOpaqueTokenIntrospector(authorizationService);
}
}
@@ -46,8 +46,6 @@ public class PigxResourceServerConfiguration {
private final PermitAllUrlProperties permitAllUrl;
private final PigxBearerTokenExtractor pigxBearerTokenExtractor;
private final OpaqueTokenIntrospector customOpaqueTokenIntrospector;
@Bean
@@ -65,8 +63,7 @@ public class PigxResourceServerConfiguration {
.authenticated())
.oauth2ResourceServer(
oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
.authenticationEntryPoint(resourceAuthExceptionEntryPoint)
.bearerTokenResolver(pigxBearerTokenExtractor))
.authenticationEntryPoint(resourceAuthExceptionEntryPoint))
.headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.csrf(AbstractHttpConfigurer::disable);