首页 > 解决方案 > Spring Security 中的哪些类/方法处理重定向到 /oauth2/authorization/{registrationId}?需要覆盖容器

问题描述

我们将 API 部署在网关后面的 docker 容器中。网关后面的一切都是http,而不是https。结果,当 Spring Security 尝试将用户重定向到授权 Uri 时,它会重定向到 http,这会引发 404。(因为当重定向命中用户的浏览器时,浏览器无法在 http 找到它,只能在 https 找到)

我一直无法找到此重定向发生的位置。例如,如果用户转到https://thecompany.com/securedpage,并且 Spring Security 发现他们没有经过身份验证(没有 JWT),那么一些代码将重定向到/oauth2/authorization/{regsitrationId}.

我找到了解析完成的位置(OAuth2AuthorizationRequestRedirectWebFilter.filter(ServerWebExchange exchange, WebFilterChain chain)但我似乎找不到重定向发生的位置。我一直沿着安全文件管理器链向下走,但即使在最后一个,重定向响应中也没有标头,也没有有一个状态302

如何覆盖重定向以强制执行 https?

标签: javaspringspring-bootspring-securityspring-security-oauth2

解决方案


您是否按照 spring 安全文档中的“代理服务器配置”一章来配置您的网关?

您需要通过设置 X-Forwarded 标头和在您的应用程序中配置 ForwardedHeaderFilter 来让您的应用程序了解该配置(https --> gateway --> http --> your_app)


推荐阅读