我有一个基本的 CAS 6.4.2 服务器在https://mycas
. 我还有一个基本的 php 客户端,我正在尝试使用 CAS 3 连接到它。这个 php 应用程序使用 phpCAS 官方客户端 ( https://github.com/apereo/phpCAS ),版本 1.4.0。
我可以使用这个 Apereo CAS 实例来保护与其他 NodeJS 应用程序的连接,但是当我尝试连接到 php 应用程序时,它在尝试验证服务票证时失败。
错误信息是:
PHP Warning: DOMDocument::loadXML(): Extra content at the end of the document in Entity, line: 1 in /usr/local/src/php-cas-client-example/composer-example/vendor/jasig/phpcas/source/CAS/Client.php on line 3426
Ticket not validated
Reason: bad response from the CAS server
CAS response:
<head/><cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>XXX</cas:user>
<cas:attributes>
<cas:clientIpAddress>XXX</cas:clientIpAddress>
<cas:isFromNewLogin>false</cas:isFromNewLogin>
<cas:authenticationDate>2021-11-29T13:53:40.699600Z</cas:authenticationDate>
<cas:successfulAuthenticationHandlers>RestAuthenticationHandler</cas:successfulAuthenticationHandlers>
<cas:userAgent>XXX</cas:userAgent>
<cas:credentialType>UsernamePasswordCredential</cas:cre
in /usr/local/src/php-cas-client-example/composer-example/vendor/jasig/phpcas/source/CAS/Client.php on line 3428
从那个错误和之前的警告中,我了解到问题出在</head>
标签上,它将 xml 变成了不正确的响应。对我来说奇怪的是,当我访问由同一个 Apereo CAS 实例(也使用 CAS 协议的第 3 版)验证的 NodeJS 应用程序时,似乎没有出现这个结束标记。
我试过的
- 将 CAS 协议版本从 3 更改为 2
- 使用旧版本的 phpClient(特别是 1.3.5 和 1.3.8)
- 修改 Apereo CAS 应该发送到 php 应用程序的属性(通过服务注册表中使用的 JSON)
- 使用旧版本的 Apereo CAS (5.2.x)。-> 这个实际上似乎有效,但我找不到原因。并且使用旧版本的 Apereo CAS 不是一种选择
那我问什么
如何解决我的 phpCAS 客户端收到该</head>
标签的问题?是关于我如何配置 Apereo CAS 服务器或 phpCAS 客户端的问题吗?或者是其他东西?
任何帮助,将不胜感激,