Spring Security OIDC + WebFlux每次都调用密钥伪装

kuhbmx9i  于 2023-01-13  发布在  Spring
关注(0)|答案(1)|浏览(165)

我已经将Spring webflux配置为使用Keycloak的Open Id连接作为IDP。
问题是,对于对我的应用程序的每次调用,oauth2客户机都调用keycloak,而不是使用安全会话。
我已经配置了我的webflux安全如下:

@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http, ServerLogoutSuccessHandler handler) {
    http
            .authorizeExchange(exchanges -> exchanges
                    .anyExchange().authenticated()
            )
            .securityContextRepository(new WebSessionServerSecurityContextRepository())
            .oauth2Login(withDefaults());
    return http.build();
}

我在Web会话中保存了一个安全上下文存储库。我在内存中配置了Web会话,如下所示:

@Bean
public ReactiveSessionRepository reactiveSessionRepository() {
    return new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
}

在我的日志中,我可以看到已找到安全上下文:

WebSessionServerSecurityContextRepository : Found SecurityContext 'SecurityContextImpl [Authentication=OAuth2AuthenticationToken [Principal=Name: [alex], Granted Authorities: [[ROLE_USER, SCOPE_email, SCOPE_openid, SCOPE_profile]], User Attributes: [{sub=bdc6b386-623f-4fe4-a013-2c694678797b, email_verified=true, name=Aleksandar KIRILOV, preferred_username=alex, given_name=John, family_name=Doe, email=mymail@mail.com}], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER, SCOPE_email, SCOPE_openid, SCOPE_profile]]]' in WebSession: 'org.springframework.session.web.server.session.SpringSessionWebSessionStore$SpringSessionWebSession@5a17f06f'

如果安全上下文在websession中仍然有效,请帮助如何避免调用keycloak。
此致!

wlzqhblo

wlzqhblo1#

我的一位同事找到了解决办法:
在spring oauth2客户端中似乎存在时钟偏差保护,并且我已经将access_token设置为仅在一分钟后过期。
时钟偏移保护也被设置为一分钟,这意味着spring将抢先去刷新令牌,因为我们接近到期时间。

相关问题