无法识别CAS票

问题描述 投票:0回答:3

我的 Web 应用程序中有一个 REST api,我可以在其中获取另一个 Web 应用程序生成的 CAS 票证。

该网络应用实习生使用

cas20proxyticketvalidator
来验证票证。因此,我还在自定义过滤器中使用
Cas20ProxyTicketValidator
来验证票据。

但它总是给我以下错误:

ticket = ST-148008-jWXKeEdHkxmuktvYqXF6-cas
org.jasig.cas.client.validation.TicketValidationException:
                ticket 'ST-148008-jWXKeEdHkxmuktvYqXF6-cas' not recognized

        at org.jasig.cas.client.validation.Cas20ServiceTicketValidator.parseResponseFromServer(Cas20ServiceTicketValidat
or.java:86)
        at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java
:217)

为什么我的票不被识别?

single-sign-on cas
3个回答
11
投票

cas验证票证的方式是:

  1. 您的客户端(或其他网络应用程序)向中继请求票证 用于特定服务的服务器,例如案例 http%3A%2F%2Fwww.mywebapp.com
  2. cas服务器生成一行,存储用户的ssoguid、服务和票据。它将票据返回给客户端(或 其他网络应用程序)
  3. 客户端(或其他网络应用程序)将票证发送到您的服务器
  4. 然后,您的服务器会向 cas 服务器的 serviceValidate 端点发送带有票证和服务的请求, http%3A%2F%2Fmywebapp.com
  5. CAS 服务器使用票证和服务对来查找它生成的行。如果找到该行,它会: a) 检查是否 通过向该 url 发送请求,服务是真实的 b) 删除该行 在此验证检查后使票证无效 c) 返回 用户将票证附加到您的服务器。现在门票可以 不再验证。

您遇到的问题可能由多种原因引起:

  1. 门票已被验证(我不认为这是 适合您的案例)
  2. 您在生成票证时发送的服务与您发送到 serviceValidate 端点的服务不同(它们必须 相同)。 (我猜这就是你的问题 遇到这种情况,特别是如果另一个网络应用程序生成了票证。这 cas 服务器上会有 http%3A%2F%2Fotherwebapp.com 文件,但会 尝试查找包含 http%3A%2F%2Fmywebapp.com 的行,其中 不存在,因为你没有创建它)
  3. 发送的服务可以 中继服务器无法联系(我不太确定 有关其工作原理或检查完成时间的详细信息,但是 建议您使用可以联系到的服务)

0
投票

检查生成的 serviceUrl ,因此更改包 org.jasig 的日志级别。

使用SpringBoot,在application.properties中添加

logging.level.org.jasig=DEBUG

在控制台中

org.jasig.cas.client.util.CommonUtils : serviceUrl generated: https://xxx

验证并调整 application.properties 中的 cas.client-host-url

## CAS[2.0]
cas.server-url-prefix=https://cashost.com/cas
cas.server-login-url=https://cashost.com/cas/login
cas.client-host-url=xxx
cas.validation-type=CAS

小心 cas.client-host-url,url 末尾不要有斜杠。

修改.properties后不要忘记mvn clean package


0
投票
就我而言,票据在验证之前就已过期。服务票默认有效期为10秒。

© www.soinside.com 2019 - 2024. All rights reserved.