【发布时间】:2024-04-19 17:30:01
【问题描述】:
以下是组件:
- tomcat 上的 Spring MVC Web 应用程序
- Azure AD IdP
- Nginx 反向代理
SSO 无需 Nginx 反向代理即可工作,因此我认为我的应用程序和 AzureID 的配置已正确完成。 但是,当 nginx 反向代理发挥作用时,我遇到了一个错误。这是日志错误
2021-02-17 19:05:14,690 172.18.0.2 /saml/SSO/alias/my_app [错误] org.opensaml.common.binding.decoding.BaseSAMLMessageDecoder - SAML 消息预期目标端点 https://myapp.example.com/saml/SSO/alias/my_app 不匹配收件人端点@987654322@
不知道为什么 http 而不是 https 被上游传递给 tomcat。我遵循最佳实践为 nginix 设置 SSL。这是 myapp 的配置
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name myapp.example.com;
access_log logs/myapp.access;
error_log logs/myapp.error error;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://myapp:8180/;
}
}
我有什么遗漏吗?任何 cmets 将不胜感激。
编辑:快速解决方案
问题是 tomcat 不会将 X-Forwarded-Proto 处理到 servlet。解决这个问题的方法很少。最简单的方法是将方案属性添加到 server.xml 中的
属性定义可以参考tomcat配置文档。 https://tomcat.apache.org/tomcat-9.0-doc/config/http.html
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyName="myapp.example.com"
proxyPort="443"
**scheme="https"** />
【问题讨论】:
标签: single-sign-on saml-2.0 nginx-reverse-proxy spring-saml