1. cas 可以将 TGT 存储到redis或者mysql. 这个TGT 是带有时间的 2. cas 开启监控页面后可以获取 st 和 TGT 的绑定信息 3. 用户登陆时,会携带 st 到 gateway 通过以上三点, 可以绑定一个自定义的token 给前端, 然后绑定到cas 存储到redis 的TGT,并将失效时间设置一致,这样每次 用户登陆都去查询是否为同一个TGT 颁发,来给前端不同的token,来实现单点登陆1. 将cas的TGT 存储到redis
引入jar2. cas 开启监控页面后可以获取 st 和 TGT 的绑定信息添加配置 cas.ticket.registry.redis.host=localhost cas.ticket.registry.redis.database=0 cas.ticket.registry.redis.port=6380 cas.ticket.registry.redis.password=123456 cas.ticket.registry.redis.timeout=20000 cas.ticket.registry.redis.useSsl=false cas.ticket.registry.redis.usePool=false 重启cas 即可 org.apereo.cas cas-server-support-redis-ticket-registry${cas.version}
#是否开启json识别功能,默认为false cas.serviceRegistry.initFromJson=true #忽略https安全协议,使用 HTTP 协议 cas.tgc.secure=false #安全管理页访问时要校验的IP地址。例如设置成127.0.0.1那么在浏览器中只能用127.0.0.1来访问,即使用localhost也是无权限访问的。 #这样做的用意是保护安全管理页的访问权限。此项默认是注释掉的,默认值为127.0.0.1,这里需要将其打开,否则是访问不到的。 cas.adminPagesSecurity.ip=127.0.0.1 #管理上下文路径,默认为/status。 management.contextPath=/status #是否开启管理安全,默认为true #management.security.enabled=false ##管理安全用户角色,默认为ACTUATOR,ADMIN #management.security.roles=ACTUATOR,ADMIN ##是否管理安全会话,默认为if_required #management.security.sessions=if_required #节点开关配置(全局) cas.monitor.endpoints.enabled=true cas.monitor.endpoints.sensitive=false 开启cas监控页面后访问: http://127.0.0.1:8080/cas/status/dashboard3. 绑定 ST 和 TGT
用户登陆成功之后会携带ST
访问: http://127.0.0.1:8080/cas/login?service=https://www.baidu.com
登陆成功后跳转:
https://www.baidu.com/?ticket=ST-1-PDlb5yvZWvKOaDNu52dKy1V7ug4xxx
获取本次登陆的 ST: ST-1-PDlb5yvZWvKOaDNu52dKy1V7ug4xxx
访问cas 接口: http://127.0.0.1:8080/cas/status/ssosessions/getSsoSessions
获取返回的json:
此处可以获取 st 和 tgt 可以正常绑定
查看es中存储得 TGT
{
"totalUsageCount": 1,
"activeSsoSessions": [
{
"authentication_date": 1637035502.546000000,
"authentication_date_formatted": "2021-11-16T12:05:02Z",
"authentication_attributes": {
"credentialType": [
"RememberMeUsernamePasswordCredential"
],
"authenticationMethod": [
"QueryDatabaseAuthenticationHandler"
],
"successfulAuthenticationHandlers": [
"QueryDatabaseAuthenticationHandler"
]
},
"authenticated_principal": "admin",
"number_of_uses": 1,
"ticket_granting_ticket": "TGT-1-L2ebMqhKuYfx29PE6yR7ilnCLc50mS0SePlHqtl8lJj0zjOHWsb9uCZjQwAUii-6m-Ixxx",
"principal_attributes": {},
"is_proxied": false,
"authenticated_services": {
"ST-1-PDlb5yvZWvKOaDNu52dKy1V7ug4xxx": {
"id": "https://www.baidu.com",
"originalUrl": "https://www.baidu.com",
"artifactId": null,
"principal": "admin",
"source": "service",
"loggedOutAlready": false,
"format": "XML"
}
}
}
],
"totalTicketGrantingTickets": 1,
"totalTickets": 1,
"totalPrincipals": 1,
"totalProxyGrantingTickets": 0
}
cas存储得TGT, 这个是存在TTL的
至此可以token 和 tgt 绑定,之后可以按照自己的逻辑实现.



