我有一个SAML2服务提供商(Open edX Platform如果它有所作为),根据docs配置,否则正常工作。它运行在http://lms.local:8000,可以与TestShib测试身份提供商和其他第三方提供商一起使用。
引入nginx反向代理时会出现问题。设置如下:
lms.local
通过主机文件Nginx有以下网站配置:
server {
listen 80;
server_name lms.local;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
问题如下:python-social-auth检测到服务器在lms.local:8000
上运行(通过request.META['HTTP_PORT']
)。因此,如果尝试通过nginx代理使用SAML SSO,则会失败并显示以下消息:
Authentication failed: SAML login failed: ['invalid_response'] (The response was received at http://lms.local:8000/auth/complete/tpa-saml/ instead of http://lms.local/auth/complete/tpa-saml/)
如果有帮助,python-saml.OneLogin_Saml2_Response.is_valid中会抛出导致此消息的异常。
问题是:是否可以在同一域上的反向代理后面运行SP,但是在不同的端口上? Shibboleth wiki表示在不同的域上运行反向代理后面的SP是totally possible,但对端口没有任何说明。
答案 0 :(得分:0)
在此特定情况下,反向代理正在发送X-Forwarded-Host
和X-Forwarded-Port
标头,因此我只修改了django策略以使用这些值而不是Django提供的值(即request.get_host
和{{1 }},它产生了两个拉取请求: