无法通过 CAS 进行身份验证

Unable to authenticate with CAS

我已经实现了一个 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::_wasPreviouslyAuthenticated() [Client.php:1393]

3CEF .| | | | no user found [Client.php:1635]

3CEF .| | | <= false

3CEF .| | | CAS 2.0 ticket `ST-7-6cgDalH6VPKQ5vE6SyCB-cas' is present [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 .| | | | | | Final 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() failed [CurlRequest.php:77]

3CEF .| | | | | <= false

3CEF .| | | | <= false

3CEF .| | | | could not open URL 'https://XX.com:8442/cas/serviceValidate?service=https%3A%2F%2Fwww.XX.com%2Fportal.php&ticket=ST-7-6cgDalH6VPKQ5vE6SyCB-cas' to validate (CURL error #7: Failed to connect to XX.com port 8442: Connection refused) [Client.php:3194]

3CEF .| | | | => CAS_AuthenticationException::__construct(CAS_Client, 'Ticket not validated', '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 .| | | | | Authentication failure: Ticket not validated [AuthenticationException.php:81]

3CEF .| | | | | Reason: no response from the CAS server [AuthenticationException.php:83]

3CEF .| | | | | exit()

3CEF .| | | | | -

3CEF .| | | | -

3CEF .| | | -

3CEF .| | -

3CEF .| -

正如我所说,它在本地和 "semi-local" 网络中工作,但我无法从外部网络进行身份验证。

我打开了 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 应用程序部署在服务器上,请确保该服务器位于可以从外部访问的适当的安全防火墙区域。您组织中的网络安全人员应该能够帮助您解决这个问题。