我有一个SAML2服务提供商(Open edX Platform,如果有所不同),根据docs配置并且其他方式正常工作。它运行在http://lms.local:8000,并且在TestShib测试身份提供商和其他第三方提供商时运行良好。SAML2服务提供商位于反向代理后面的非标准端口
问题从nginx反向代理引入时开始。设置如下:
- nginx的,很明显,在端口上运行80
- LMS(服务提供商)端口8000
lms.local
运行化名为本地主机通过hosts文件
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-socia l-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说它是totally possible在不同域上的反向代理之后运行SP,但没有提及端口。