弹簧SAML 2.0落后于Nginx



我有一个Spring启动web应用程序,它使用由https://samltest.id/。

它在本地主机上运行良好,但现在我正试图将它放在具有Nginx的服务器上。Ngnix的配置使任何http请求都重定向到https和https://myserver.company.com/myApp/发送到http://local_ip:local_port/。

如果应用程序没有安全性,但使用SAML,这个cfg可以正常工作,结果是:当我访问应用程序的主页时,我会重定向到登录页面(正确(,成功登录后,我会被重定向到https://myserver.company.com/saml/SSO/而不是https://myserver.company.com/myApp/saml/SSO所以Nginx给出了404。

元数据.xml包含:

<md:AssertionConsumerService Location="http://myserver.company.com:80/saml/SSO"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/>
<md:AssertionConsumerService Location="http://myserver.company.com:80/saml/SSO"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/>

请注意,URL是基于http的。

经过大量的谷歌搜索,我尝试了以下操作:我修改了SAMLProcessingFilter配置,使filterProcessesUrl属性为"/myApp/saml/SSO",而不是默认值"/saml/SSO"

现在metadata.xml包含:

<md:AssertionConsumerService Location="http://myserver.company.com:80/myApp/saml/SSO"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/>
<md:AssertionConsumerService Location="http://myserver.company.com:80/myApp/saml/SSO"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/>

登录后,我被重定向到https://myserver.company.com/myApp/saml/SSO但这一次我从web应用程序得到了一个404,而不是Nginx(错误页面不同(。

我错过了什么?

更新:第三次尝试

  • SAMLProcessingFiltercfg恢复为默认值
  • 将我的应用程序的上下文根修改为http://local_ip:local_port/myApp
  • 修改了Nginx-cfg,以便https://myserver.company.com/myApp/地图到http://local_ip:local_port/myApp(相同的上下文根(
  • MetadataGeneratorentityBaseURL属性设置为https://myserver.company.com/myApp
  • 已将新的metadata.xml上载到https://samltest.id/(现在它包含https URL(

现在,在成功登录后,我被重定向到https://myserver.company.com/myApp/saml/SSO正如预期的那样,但我从应用程序中得到了一个401,消息为"Authentication Failed:Incoming SAML message is invalid",并且在应用程序日志中有"org.pensaml.com.mon.SAMLException:Unsupported request"。

经过几次尝试,我找到了解决方案。无需修改SAMLProcessingFilter或上下文根。关键是使用SAMLContextProviderLB,而不是本手册"高级配置"一章中所述的SAMLContextProviderImpl。此外,我的问题中已经描述的entityBaseURL更改也是必要的(它也在手册中(。

相关内容

  • 没有找到相关文章

最新更新