2014-09-25 47 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. 發送可以 不是由中繼服務器聯絡服務(我不完全確定的 細節關於這是如何工作的,或者確切的是在檢查完成時,但是 建議您使用可聯繫的服務)