2025年CAS 5.3.X ticket存储与过期

CAS 5.3.X ticket存储与过期https apereo github io cas 5 3 x installation Configuring Ticketing Components html ticket 访问令牌 ticket 需要配置 2 种组件 1 TicketRegist ticket 存储 2 ExpirationPo

大家好,我是讯享网,很高兴认识大家。

https://apereo.github.io/cas/5.3.x/installation/Configuring-Ticketing-Components.html

ticket : 访问令牌

ticket 需要配置2种组件

1,TicketRegistry  ticket存储

2,ExpirationPolicy  提供一种ticket的过期策略

首先介绍ticket过期策略

CAS支持多种策略框架来控制ticket的过期。不管ticket使用了何种分发方式:

ticket-granting tickets TGT

proxy-granting tickets PGT

services tickets ST

proxy tickets PT

说明:CAS集成了多种可选组件,每种组件都有一个TICKET的抽象。每种协议或组件也行会引入一种新的TICKET类型,会有各自的过期策略。所以选择某种组件时需要自己阅读相关文档

ticket-granting ticket策略

简单来说 就是用户已经授权了。 使用一个未过期的TICKET来重新请求新TICKET时不需要重新授权,如果使用了已经过期的,需要重新授权登录。 类似OAUTH2的refresh-token

默认配置

# Set to a negative value to never expire tickets  负值就是永不过期
# cas.ticket.tgt.maxTimeToLiveInSeconds=28800
# cas.ticket.tgt.timeToKillInSeconds=7200

remember me配置

timeout:   most-recently-used 清理最近最多使用的过期策略  类型WEB应用SESSION过期策略

# cas.ticket.tgt.timeout.maxTimeToLiveInSeconds=28800

throttled timeout

扩展了timeout过期策略, 此种策略有一个throttling的概念,在此窗口,一个ticket最多每N秒使用一次。主要用来现在某些客户端配置错误,导致大量的请求

hard timeout

创建后一段时间后必须过期

# cas.ticket.tgt.hardTimeout.timeToKillInSeconds=28800

Service Ticket 策略


讯享网

这种过期测试,设置一个时间范围,在此范围内一个授权的用户可以使用ST

TICKET 访问过N次后过期。或者空闲N秒后过期

# cas.ticket.st.maxLength=20
# cas.ticket.st.numberOfUses=1
# cas.ticket.st.timeToKillInSeconds=10

proxy ticket 策略

看起来和service ticket过期策略一样,也行实现不一样。。。 

Proxy-granting ticket策略

# cas.ticket.pgt.maxLength=50

在有效期内。 可以通过一个有效的PGT 来获取一个PT, 过期策略同ticket-granting ticket一致

TicketRegistry 

部署环境与技术经验通常决定了如何选择ticket存储组件

基于缓存的实现比较适合HA部署方式

基于内存(in_memory)的只能适合小应用系统

可以存储在数据库、缓存。具体实现包括:JMS hazelcast JPA ehcache memcached JPA redis mongodb等。

下文只接受将令牌存储在redis,基于MAVEN资源库

1,引入

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-redis-ticket-registry</artifactId>
    <version>${cas.version}</version><!-- 5.3.3 -->
</dependency>

存到REDIS的KEY,以CAS_TICKE:开头

配置:

cas.ticket.registry.redis.host=localhost
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6380
cas.ticket.registry.redis.password=
cas.ticket.registry.redis.timeout=2000
cas.ticket.registry.redis.useSsl=false
cas.ticket.registry.redis.usePool=true

cas.ticket.registry.redis.pool.max-active=20
cas.ticket.registry.redis.pool.maxIdle=8
cas.ticket.registry.redis.pool.minIdle=0
cas.ticket.registry.redis.pool.maxActive=8
cas.ticket.registry.redis.pool.maxWait=-1
cas.ticket.registry.redis.pool.numTestsPerEvictionRun=0
cas.ticket.registry.redis.pool.softMinEvictableIdleTimeMillis=0
cas.ticket.registry.redis.pool.minEvictableIdleTimeMillis=0
cas.ticket.registry.redis.pool.lifo=true
cas.ticket.registry.redis.pool.fairness=false

cas.ticket.registry.redis.pool.testOnCreate=false
cas.ticket.registry.redis.pool.testOnBorrow=false
cas.ticket.registry.redis.pool.testOnReturn=false
cas.ticket.registry.redis.pool.testWhileIdle=false

cas.ticket.registry.redis.sentinel.master=mymaster
cas.ticket.registry.redis.sentinel.node[0]=localhost:26377
cas.ticket.registry.redis.sentinel.node[1]=localhost:26378
cas.ticket.registry.redis.sentinel.node[2]=localhost:26379

对ticket的签名加密设置:

configurationKey 的值是cas.ticket.registry.redis. 实际使用时没做签名加密.令牌本身也没业务状态,&签名后太长

# ${configurationKey}.crypto.signing.key=
# ${configurationKey}.crypto.signing.keySize=
# ${configurationKey}.crypto.encryption.key=
# ${configurationKey}.crypto.encryption.keySize=

ticket过期就是存reids时的过期时间 time
# ${configurationKey}.crypto.alg=AES
# ${configurationKey}.crypto.enabled=false

 

小讯
上一篇 2025-01-16 15:57
下一篇 2025-01-07 21:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15335.html