2014-09-25 55 views
1

我在我的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) 

为什么不承认我的票?

回答

5

是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. 发送可以 不是由中继服务器联络服务(我不完全确定的 细节关于这是如何工作的,或者确切的是在检查完成时,但是 建议您使用可联系的服务)