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