我们正在建立一个Web应用程序架构,我们的应用程序EAR部署在配置了非ssl Http Port Listener的appServer中。每个请求都通过F5 Load Balancer->进行路由。 Web服务器 - > App Server。
在Load Balancer中,我们设置了一个iRule,其中每个Http请求都转发到端口443上设置的Https,我们的应用程序运行正常。现在我们尝试使用OpenSSO联合解决方案和SAML技术实现SSO。我们在app服务器中部署了带有非ssl http侦听器配置的opensso。
现在,当我们尝试使用url xhttp:// domain_name / opensso(伪协议)访问opensso时,它会根据在Load Balancer上设置的iRule重定向为xhttps:// domain_name / opensso。但是在opensso的配置页面中,服务器URL仅填充为xhttp:// domain_name而不是xhttps:// domain_name。同样,遵循相同的方法来填充整个opensso配置中的所有URL属性。因此,当我尝试使用ssoadm GUI生成元数据时,在表单操作属性中,url形成为“http”,请求方法仅根据Opensso约定作为“POST”传递。但是当根据负载均衡器规则将其重定向到“https”时,Request方法将作为“GET”而不是post传递,并且opensso验证失败并将错误抛出为“需要HTTP Post Protocol。”
所以这里的问题是,默认情况下,opensso URL属性应填充“https”而不是“http”。我想知道这里完成的错误配置是什么。我们如何解决这个问题?感谢。
答案 0 :(得分:0)
我认为您会发现答案实际上在您的应用程序服务器中,而不是应用程序本身。您需要向servlet指出它正在被代理,并且它负责使用HTTPS方案而不是HTTP来创建URL。
如果您使用的是Tomcat或衍生产品,则可以修改server.xml以包含以下内容:
proxyPort="443"
proxyName="www.domain_name.com"
scheme="https"
secure="true"
答案 1 :(得分:0)
您可以将负载均衡器配置为使用307 http状态代码重定向到https,该代码通知客户端使用原始请求方法。如果POST是原始请求方法,那么在重定向之后,客户端将继续使用POST而不是GET。
HTTP ::回复307位置“https://[HTTP::host][HTTP::uri]”