没有认可的卡票

pra*_*dar 2 cas single-sign-on

我在我的Web应用程序中有一个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)
Run Code Online (Sandbox Code Playgroud)

为什么我的机票无法识别?

Har*_*rro 7

cas验证票证的方式是:

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

您遇到的问题可能有以下几个原因:

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