没有认可的卡票

时间:2014-09-25 06:30:34

标签: single-sign-on cas

我在我的网络应用程序中有一个REST api,我获得了另一个webapp生成的cas票证。

该webapp实习生使用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)

为什么我的票不被识别?

2 个答案:

答案 0 :(得分:6)

cas验证票证的方式是:

  1. 您的客户(或其他网络应用)要求来自中继的票证 用于特定服务的服务器,例如case http%3A%2F%2Fwww.mywebapp.com
  2. cas服务器生成一行,用于存储用户的ssoguid,服务和票证。它将票证返回给客户(或 其他网络应用程序)
  3. 客户端(或其他webapp)将票证发送到您的服务器
  4. 您的服务器然后使用故障单和服务向cas服务器的serviceValidate端点发送请求, http%3A%2F%2Fmywebapp.com
  5. cas服务器使用故障单和服务对来查找它生成的行。如果它找到了行:a)检查是否有 通过向该URL发送请求来实现服务b)删除该行 在此验证检查后使票证无效c)它返回 用户附加到您的服务器的票证。现在票可以 不再被证实。
  6. 您遇到的问题可能有以下几个原因:

    1. 票证已经过验证(我认为不是 你的情况)
    2. 生成故障单时发送的服务与发送给serviceValidate端点的服务不同(他们必须 相同)。 (我猜这就是你的问题 体验,特别是如果另一个webapp生成了票证。该 cas服务器上有http%3A%2F%2Fotherwebapp.com,但会 试图找到一个http%3A%2F%2Fmywebapp.com的行,其中 因为你没有创建它而不存在)
    3. 发送的服务可以 中继服务器不联系(我不太确定 有关其工作原理的详细信息或完成检查时的详细信息 建议您使用可以联系的服务)

答案 1 :(得分: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,网址末尾不能使用斜杠。

修改.properties后,不要忘记 mvn干净软件包