我正在使用OAuth2和Sping Boot 3.1.5实现Keycloak 22.0.5。我想使用基本身份验证。在keycloak方面,我已经为用户创建了一个Realm,client,user和相应的角色,并且适用于我正在ping的端点。我经常遇到这个错误的问题:
DEBUG o.s.s.w.s.SessionManagementFilter.doFilter - Request requested invalid session id ***SESSION_ID_TOKEN***
字符串
SESSION_ID_TOKEN在我尝试发送到端点的每个请求的日志中总是相同的,并且我总是得到401 Unauthorized。
这是我当前的实现:
- 应用程序.yml:*
origins: http://localhost:9999
issuer: **KEYCLOAK-URL**
com:
c4-soft:
springaddons:
oidc:
ops:
- iss: ${issuer}
username-claim: preferred_username
authorities:
- path: $.realm_access.roles
prefix: ROLE_
- path: $.resource_access.*.roles
resourceserver:
cors:
- path: /**
allowed-origin-patterns: ${origins}
permit-all:
- "/example"
型
- WebSecurityConfig:*
@Configuration
@EnableMethodSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable);
http.authorizeHttpRequests(accessManagement -> accessManagement
.anyRequest().authenticated());
http.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
http.exceptionHandling(eh -> eh.authenticationEntryPoint((request, response, authException) -> {
response.addHeader(HttpHeaders.WWW_AUTHENTICATE, "Bearer realm=\"Restricted Content\"");
response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase());
}));
return http.build();
}
}
型
我在Keycloak -> Realm settings -> Sessions中的设置是:x1c 0d1xx 1c 1d 1x
有人知道问题出在哪吗?
1条答案
按热度按时间eqqqjvef1#
你的问题中有很多矛盾之处:
Basic
身份验证设置Keycloak的意义是什么?Keycloak是一个OIDC授权服务器,它旨在用于OAuth2安全流spring-addons-starter-oidc
属性,所以我想你在classpath上有the jar(不能确定,因为你既没有提供pom也没有提供gradle构建文件),但是你定义了自己的SecurityFilterChain
,而没有securityMatcher
=>这个过滤器链旨在处理所有请求。如果它配置的resourceServerSecurityFilterChain
从未使用过,那么使用spring-addons有什么意义呢?SecurityFilterChain
是无状态的,但是既没有为Basic
也没有为Bearer
授权进行配置。您希望它如何准确地工作?我的猜测是因为你没有在你定义的
SecurityFilterChain
中设置Basic
或Bearer
授权(并设计为拦截所有请求),Spring Security试图从会话构建安全上下文,但是因为你也定义了sessionCreationPolicy(SessionCreationPolicy.STATELESS)
,它找不到有效的会话令牌。但是没有reproducer项目,很难说。