解决CAS客户端验证ST票据时发生的TicketValidationException问题

最近在项目中debug验证ST票据之后返回值时,发生了ST票据验证错误的异常。
org.jasig.cas.client.validation.TicketValidationException:
Ticket ‘ST-80-FFSThMbPg2dMee3eFveu-8080’ not recognized

经过研究CAS服务器端代码发现,原来是CAS服务器的ST票据有效期时间太短,默认是10秒。开发在debug时,非常容易超过10秒,所以会发生TicketValidationException异常。

解决方法:要在CAS服务器端修改两处配置

1 修改保存在Redis或Memcached等缓存中的票据本身的有效期。
在WEB-INF/spring-configuration/ticketRegistry.xml文件中修改。

<bean id="ticketRegistry" class="com.casserver.ticket.TicketRegistry">
    <constructor-arg index="0" ref="redisClient" />
    
    <constructor-arg index="1" value="28800" />
    
    <constructor-arg index="2" value="1800" />
    
  bean>

2 修改CAS服务器本身的超时判断时间。
在WEB-INF/cas.properties中修改。也是将默认时间由10秒改为 一个大一点的数字,如1800秒(半小时)

##
# Service Ticket Timeout
# Default sourced from WEB-INF/spring-configuration/ticketExpirationPolices.xml
#
# Service Ticket timeout - typically kept short as a control against replay attacks, default is 10s.  You'll want to
# increase this timeout if you are manually testing service ticket creation/validation via tamperdata or similar tools
# st.timeToKillInSeconds=10

st.timeToKillInSeconds=1800

改好之后,用postman做个测试。

解决CAS客户端验证ST票据时发生的TicketValidationException问题_第1张图片

成功了,不再出现TicketValidationException异常了。

你可能感兴趣的:(技术)