Spring social在代理后面进行身份验证时添加错误的 Location 标头
我的设置包含3个docker映像
现在,在进行身份验证时,一切工作正常,直到Google身份验证成功为止。
当google重定向到我的页面时,请求的URL是正确的 https://example.com/signin/google ,但是 Location 标头是 http://backend-app:8080/social/signup ,浏览器尝试访问位置标头中的网址,因为它是内部网址,所以失败了。
在配置中,我将 https://example.com 设置为应用程序网址
@Bean
public ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository usersConnectionRepository, SignInAdapter signInAdapter) {
ProviderSignInController providerSignInController = new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, signInAdapter);
providerSignInController.setSignUpUrl("/social/signup");
providerSignInController.setApplicationUrl(environment.getProperty("application.be.url"));
return providerSignInController;
}
但是 Location 标头仍然是内部网址。我不确定问题出在nginx还是后端应用程序中,但是我怀疑后端应用程序是什么。
答案 0 :(得分:0)
通过添加到我的nginx使其正常工作。
location /signin {
proxy_set_header Host example.com;
proxy_pass http://backend-app:8080/signin;
}
location /social {
proxy_set_header Host example.com;
proxy_pass http://backend-app:8080/social;
}
我以前尝试过,但是也许我当时做错了其他事情...