我有一個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,但沒有提及端口。