spring-security redirect_uri包含http而不是https

suzh9iv8  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(155)

我正在使用Azure OAuth2开发Spring Web应用程序。
当我在本地主机中运行应用程序时,应用程序能够为我登录,并且重定向URI为“https://...../login”。当我在Azure应用程序服务上上载应用程序并尝试登录时,我看到redirect_uri为“http://..../login”,而不是https
我在www.example.com文件中尝试了以下属性application.properties,但没有帮助。

security.oauth2.client.pre-established-redirect-uri=https://appname.azurewebsites.net/login
security.oauth2.client.registered-redirect-uri=https://appname.azurewebsites.net/login
security.oauth2.client.use-current-uri=false

如何解决此错误?

更新

设置上述属性将设置正确的redirect-uri,但问题如下:
1.我浏览“https://mywebapp.azurewebsites.net“
1.页面加载时会显示一个登录按钮。
1.登录按钮使用Azure AD执行sso Oauth2身份验证。
1.第一次重定向发生在“http://mywebapp.azurewebsites.net/login“上。这是Spring Oauth2自动配置库的默认sso登录路径。
1.由于Web应用程序仅支持https,因此http重定向会导致问题。当我在浏览器中手动将http编辑为https时,SSO身份验证正常进行,但Web应用程序的 Jmeter 板页面再次重定向到“http://.../dashboard.html”而不是“https://.../dashboard.html”。
我看了很多Stack Overflow的帖子,似乎Azure应用服务环境中有一个带有Tomcat的Zuul代理,而该代理使用的是http。这可能是问题的根本原因。
我被这个烦人的重定向到http卡住了。
我发现了类似的问题mentioned here

ss2ws0br

ss2ws0br1#

请遵循在代理服务器后面运行时启用HTTPS
标准行为由某些请求头(x-forwarded-forx-forwarded-proto)的存在与否决定,这些头的名称是常规的,因此它应该适用于大多数前端代理。您可以通过向application.properties添加一些条目来打开该值,如以下示例所示:

server.tomcat.remoteip.remote-ip-header=x-forwarded-for
server.tomcat.remoteip.protocol-header=x-forwarded-proto

要将Spring Security配置为要求所有(或部分)请求使用安全通道,请考虑添加您自己的WebSecurityConfigurerAdapter,该WebSecurityConfigurerAdapter将添加以下HttpSecurity配置:

@Configuration(proxyBeanMethods = false)
public class SslWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Customize the application security
        http.requiresChannel().anyRequest().requiresSecure();
    }
}
rta7y2nd

rta7y2nd2#

这是当您的Web服务器位于HTTPS终止的代理服务器之后时的行为。请访问此处查看基于springboot的应用程序的解决方案:https://stackoverflow.com/a/73071882/4455267

相关问题