Spring Security 使用spring Boot oauth2客户端和spring-session xAuthToken会话ID解析器时的无限循环

wn9m85ua  于 2023-11-19  发布在  Spring
关注(0)|答案(1)|浏览(172)

我尝试将带有xAuthToken ID解析器的spring-session添加到spring-authorizationdemo client,但在OAuth2服务器上验证用户后,浏览器陷入了无限重定向循环。我想使用x-auth-token而不是JSESSIONID,因为我想通过@RestController而不是MVC @Controller使用demo-clinet端点。你知道如何在该项目中使用x-auth-token而不是JSESSIONID吗?
我已经启动了redis并使用spring-session而没有启用xAuthToken,一切都很好,但是当我通过以下片段启用xAuthToken时,浏览器陷入了无限重定向循环。

@Bean
    fun sessionResolver(): HttpSessionIdResolver = HeaderHttpSessionIdResolver.xAuthToken();

字符串

6fe3ivhb

6fe3ivhb1#

OAuth2(使用authorization_code授权)是基于重定向的(或者更一般的基于浏览器的)流。这意味着浏览器用于会话管理,这也意味着cookie。spring-session中的HeaderHttpSessionIdResolver在您拥有API客户端时有效,但在您拥有浏览器客户端时无效,因为浏览器不会自动处理响应中的X-Auth-Token头,而它确实会自动处理Set-Cookie头。所以我不相信有一种简单的方法可以在OAuth2中使用这种会话解析策略。
具体来说,这个问题发生在访问未经认证的页面后的第一次重定向中。当写入会话时,浏览器不会记住会话ID,并且每个后续请求都像是重新开始,因此重定向循环。
然而,我最近构建了一个sample,它将AuthorizationRequestRepositorySecurityContextRepository和其他一些实现插入到Spring Security中,以使这样的流工作。虽然它实际上是用于响应式客户端应用程序,所以它们是响应式实现。

相关问题