我正在尝试让OneLogin Saml身份验证在我的实时服务器上工作,并且正在运行时遇到与我的AWS负载平衡器设置有关的问题。我认为问题在于我有一个经典的负载均衡器,它使用AWS通配符HTTPS证书在端口80和443上侦听。负载均衡器将这两个端口转发到我的服务器上的端口80,并添加HTTP_X_FORWARDED_PROTO标头。Onelogin SAML与AWS负载平衡器
当我使用我的正常开发服务器(不是负载均衡器后面)SAML身份验证正常工作。我正在得到一个适当的回应。但是,当我推动生存时,SAML响应返回一个空的POST字典,而没有RELAY STATE。
任何想法为什么POST将是空的?
我的设置是:
- 的Python与SAML连接器开发服务器上
- 工作正常社会权威性
- 当我用我的直播服务器在防火墙后面,响应空
我怀疑它与我的SSL证书有关,或者我的负载均衡器将443转发到端口80上的服务器并添加了标头。我试图通过分析转发的报头创建AUTH请求解决这个:
def _create_saml_auth(self, idp):
"""Get an instance of OneLogin_Saml2_Auth"""
config = self.generate_saml_config(idp)
request_info = {
'https': 'on' if self.strategy.request_is_secure() else 'off',
'http_host': self.strategy.request_host(),
'script_name': self.strategy.request_path(),
'server_port': self.strategy.request_port(),
'get_data': self.strategy.request_get(),
'post_data': self.strategy.request_post(),
}
if 'HTTP_X_FORWARDED_PROTO' in self.strategy.request.META:
request_info['https'] = 'on' if self.strategy.request.META.get('HTTP_X_FORWARDED_PROTO') == 'https' else 'off'
request_info['server_port'] = self.strategy.request.META.get('HTTP_X_FORWARDED_PORT')
但仍然无法返回从Onelogin SAML响应的empyy POST字典。尽管使用HTTPS正确生成初始url。
有没有人有类似的问题。我卡住了,很想让Onelogin工作。
非常感谢您的时间。
干杯,
菲尔
评论这个线程: https://github.com/onelogin/python-saml/issues/75#issuecomment-108647017 – smartin