【发布时间】:2019-01-25 07:29:44
【问题描述】:
我有一个在 Widfly 服务器上运行的 Spring Boot Web 应用程序。我通过生成链接到 Facebook 登录端点的“使用 Facebook 登录”按钮来实现 Facebook OAuth 登录。
https://www.facebook.com/v2.5/dialog/oauth?client_id=****&response_type=code&redirect_uri=http://example.com/login/facebook
我使用以下 java 代码生成 redirect_uri 的值。
public static String getFacebookRedirectUrl() {
RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
if (attrs instanceof ServletRequestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes) attrs).getRequest();
return request.getScheme() + "://"
+ request.getServerName() + ":"
+ request.getServerPort()
+ request.getContextPath()
+ "/login/facebook";
} else {
throw new RuntimeException("Cannot determine facebook oauth redirect url");
}
}
我的网站在内部部署到 http://my-ip-address:8080,并有一个反向代理 (nginx) 将请求从 https://example.com 转发到 http://my-ip-address:8080。
问题是redirect-uri 总是生成为http://example.com/login/facebook 而不是https://example.com/login/facebook(不是https)。
当用户通过https访问网站时,请帮助建议如何使request.getScheme()正确返回https。以下是反向代理配置/etc/nginx/sites-enalbed/mysite.com
server {
listen 80;
listen 443;
server_name example.com www.example.com;
ssl on;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
location / {
proxy_pass http://my-ip-address:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
【问题讨论】:
标签: spring redirect nginx https reverse-proxy