Spring社交在代理后进行身份验证时添加了错误的位置标头
我的设置包含3个docker映像
现在,在进行身份验证时,一切正常,直到谷歌身份验证成功。
当谷歌重定向到我的页面的请求url是正确的https://example.com/signin/google,但位置头是超文本传输协议://backend-app: 8080/社会/注册和浏览器试图访问位置头中的url失败,因为它是一个内部url。
在配置中,我将https://example.com设置为应用程序url
@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;
}
但不知何故,位置标头仍然是内部url。我不确定问题是在nginx还是后端应用程序中,但我怀疑是后端应用程序。
通过添加到我的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;
}
我以前试过,但也许那时我做错了什么…