Nginx代理背后的Spring社交身份验证

时间:2018-07-19 18:11:02

标签: nginx spring-social

Spring social在代理后面进行身份验证时添加错误的 Location 标头

我的设置包含3个docker映像

  • Nginx
  • Spring启动应用程序
  • Angular 5应用程序

现在,在进行身份验证时,一切工作正常,直到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还是后端应用程序中,但是我怀疑后端应用程序是什么。

1 个答案:

答案 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;
}

我以前尝试过,但是也许我当时做错了其他事情...