【发布时间】:2018-05-09 08:25:04
【问题描述】:
我已经实施了 SSO 服务,并且在很多天之后,我得到了它。但是现在我遇到了一个问题,如果您在本地网络和位于同一位置的另一个网络中,CAS 服务 (SSO) 可以工作,但是如果我从外部网络连接,我将无法连接。我可以访问服务,但一步失败并出现错误:连接被拒绝。
我使用 phpCAS 对服务进行身份验证,日志是这样的:
3CEF .=> phpCAS::forceAuthentication() [portal.php:16]
3CEF .| => CAS_Client::forceAuthentication() [CAS.php:1098]
3CEF .| | => CAS_Client::isAuthenticated() [Client.php:1280]
3CEF .| | | => CAS_Client::_wasPreviousAuthenticated() [Client.php:1393]
3CEF .| | | |未找到用户 [Client.php:1635]
3CEF .| | |
3CEF .| | | CAS 2.0 票证“ST-7-6cgDalH6VPKQ5vE6SyCB-cas”存在 [Client.php:1447]
3CEF .| | | => CAS_Client::validateCAS20('', NULL, NULL, false) [Client.php:1450]
3CEF .| | | | [Client.php:3169]
3CEF .| | | | => CAS_Client::getServerServiceValidateURL() [Client.php:3176]
3CEF .| | | | | => CAS_Client::getURL() [Client.php:453]
3CEF .| | | | | |最终 URI:https://www.XX.com/portal.php [Client.php:3548]
3CEF .| | | | | https://www.XX.com/portal.php'
3CEF .| | | | https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php'
3CEF .| | | | => CAS_Client::_readURL('https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php&ticket=ST-7-6cgDalH6VPKQ5vE6SyCB-cas', NULL, NULL, NULL) [Client.php:3191]
3CEF .| | | | | => CAS_Request_CurlRequest::sendRequest() [AbstractRequest.php:242]
3CEF .| | | | | | curl_exec() 失败 [CurlRequest.php:77]
3CEF .| | | | |
3CEF .| | | |
3CEF .| | | |无法打开 URL 'https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php&ticket=ST-7-6cgDalH6VPKQ5vE6SyCB-cas' 进行验证(CURL 错误 #7:无法连接到 XX.com 端口 8442:连接被拒绝)[Client.php:3194]
3CEF .| | | | => CAS_AuthenticationException::__construct(CAS_Client, '票证未验证', 'https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php&ticket=ST-7-6cgDalH6VPKQ5vE6SyCB-cas', true) [Client.php:3198]
3CEF .| | | | | => CAS_Client::getURL() [AuthenticationException.php:77]
3CEF .| | | | | https://www.XX.com/portal.php'
3CEF .| | | | | CAS URL:https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php&ticket=ST-7-6cgDalH6VPKQ5vE6SyCB-cas[AuthenticationException.php:80]
3CEF .| | | | |身份验证失败:票证未验证 [AuthenticationException.php:81]
3CEF .| | | | |原因:CAS服务器没有响应[AuthenticationException.php:83]
3CEF .| | | | |退出()
3CEF .| | | | | -
3CEF .| | | | -
3CEF .| | | -
3CEF .| | -
3CEF .| -
正如我所说,它适用于本地和“半本地”网络,但我无法从外部网络进行身份验证。
我打开了 8442 端口,但由于某种原因,外部网络的 8442 端口已关闭。我知道这是问题所在,但我不知道如何让这个端口监听应用程序。事实上,CAS 服务位于一台服务器中,而 WebService(登录、门户...)位于另一台服务器中。我一直在配置防火墙,但可能我做错了,但我不知道会发生什么,因为在本地它运行良好。
如果我在浏览器上输入带有服务和票证(https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php&ticket=ST-7-6cgDalH6VPKQ5vE6SyCB-cas)的 validateService 的 URL,我会正确获取用户名,所以我不知道为什么在 phpCAS 的事务中不起作用。
希望你能帮助我,谢谢你的回答!
【问题讨论】:
-
连接被拒绝。这显然是一个防火墙问题。如果您已在服务器上部署了 CAS 应用程序,请确保该服务器位于可以从外部访问的正确安全防火墙区域中。我认为,您组织中的网络安全人员应该能够为您提供帮助。
-
我可以解决它。我对 phpCAS 源代码进行了更改以获得正确的 URL,因为正如您所说,某些 URL 无法从某些网络访问。现在它正在工作。顺便说一句,谢谢你的评论:)
-
很高兴它有帮助。如果他们最终遇到同样的问题,我将其发布为将来帮助其他人的答案。如果您认为它适合您的问题,请接受答案。