当Simplesamlphp落后于负载均衡器时失败

时间:2015-12-26 20:24:54

标签: php https load-balancing saml-2.0 simplesamlphp

我们使用simplesamlphp作为服务提供商。我们已与许多Idp集成。一切正常。

现在我们要将服务器架构更改为webserver。当我们将load balancer放在https前面时,问题出现了。 idp的错误。

load balancer终止webserver,我认为这是问题发生的地方。因此,当http将请求发送到xml时,这是一个常规load balancer请求。

当我记录最初发生的事情时,我得到了

我要稍微简化一下Session: 'idp-name' not valid because we are not authenticated. Saved state: '_somelongstringofnumbersandletters' Sending SAML 2 AuthnRequest to '{{their info}}' Sending message: <samlp:AuthnRequest ... AssertionConsumerServiceURL="http://{{our-info}}"> <saml:Issuer>http://{{our-info}}</saml:Issuer> <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true"/> </samlp:AuthnRequest> 并将不同的部分放在

load balancer

webserver

因此,指向httphttps的唯一不同部分分别是simplesamlphphttps

不确定是否有办法让http返回https。或者它会始终检查请求的当前状态并假设foo

只是为了确保我提供所有数据。该过程由SP初始化。所以他们只是去找https://oursite.com/idp-name这样的网址。我们一直在使用bar

如果我需要澄清一些事情,请告诉我。

更新

我们通过 NOT 在负载均衡器处终止HTTPS请求并允许请求传递到服务器来解决问题。因此,我们的SSL证书直接在我们的Web服务器上,而不是负载均衡器。

我无法得到解决方案,但这可能只是我自己的错。我们需要快速解决方案,而不是在负载均衡器上解密SSL是最简单的方法。

1 个答案:

答案 0 :(得分:2)

詹姆斯!

我相信您正在使用负载均衡器作为反向代理,因此请确保在您的config / config.php中设置正确的变量,尤其要注意 baseurlpath

List<RegistraionVM.RegDataTable> _dTableReg = new List<RegistraionVM.RegDataTable> ();
 _dTableReg = _db.StudentRegistrations
              .AsEnumerable()
              .OrderByDescending(r => r.Id)
              .Select(r => new 
               {                    
                   SoftwareUsed = string.Join(",", r.StudentRegistrationCourses
                                 .SelectMany(c => c.MultiCourse.MultiCourseDetails
                                 .Select(mc => mc.Course.Name)))
                }

...

同时确保返回SP的回复返回正确的协议(https)

事实上,如果我的假设是正确的,错误日志会很感激