提问者:小点点

nginx代理背后的Spring社交认证


Spring社交在代理后进行身份验证时添加了错误的位置标头

我的设置包含3个docker映像

  • Nginx
  • Spring Boot应用程序
  • Angular 5应用程序

现在,在进行身份验证时,一切正常,直到谷歌身份验证成功。

当谷歌重定向到我的页面的请求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还是后端应用程序中,但我怀疑是后端应用程序。


共1个答案

匿名用户

通过添加到我的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;
}

我以前试过,但也许那时我做错了什么…