解决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" />
    <!-- TGT timeout in seconds -->
    <constructor-arg index="1" value="28800" />
    <!-- ST timeout in seconds 将默认时间由10秒改为 1800秒(半小时) -->
    <constructor-arg index="2" value="1800" />
    <!-- <property name="kryoTranscoder" ref="kryoTranscoder" /> -->
  </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做个测试。

测试ST验证

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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
客户端应用程序使用CAS 2.0协议从CAS服务器中获取票据ticket),可以使用以下步骤来验证票据并获取用户的属性信息: 1. 客户端应用程序将票据ticket)发送到CAS服务器,以获取与该票据关联的用户属性信息。 2. CAS服务器验证票据,如果票据有效,则返回与该票据关联的用户属性信息。 3. 客户端应用程序可以解析返回的XML响应,以获取用户属性信息。 以下是一个示例XML响应: ``` <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>johndoe</cas:user> <cas:attributes> <cas:firstName>John</cas:firstName> <cas:lastName>Doe</cas:lastName> <cas:email>johndoe@example.com</cas:email> </cas:attributes> </cas:authenticationSuccess> </cas:serviceResponse> ``` 在上面的示例中,`<cas:user>`元素包含与票据关联的用户名,`<cas:attributes>`元素包含其他用户属性信息。 客户端应用程序可以使用以下步骤来解析XML响应: 1. 使用XML解析器解析响应。 2. 使用XPath表达式获取所需的元素和属性。 例如,以下XPath表达式可以用于获取用户名: ``` /cas:serviceResponse/cas:authenticationSuccess/cas:user ``` 类似地,以下XPath表达式可以用于获取用户的电子邮件地址: ``` /cas:serviceResponse/cas:authenticationSuccess/cas:attributes/cas:email ``` 需要注意的是,CAS服务器返回的XML响应中可能包含不同的元素和属性,具体取决于服务器配置和应用程序要求。因此,在实际应用中,需要仔细查看CAS服务器文档,以了解响应中包含的元素和属性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值