CAS前后端分离思路,gateway绑定cas的TGT

思路讲解:
1. cas 可以将 TGT 存储到redis或者mysql. 这个TGT 是带有时间的
2. cas 开启监控页面后可以获取 st 和 TGT 的绑定信息
3. 用户登陆时,会携带 st 到 gateway
通过以上三点,  可以绑定一个自定义的token 给前端, 然后绑定到cas 存储到redis 的TGT,并将失效时间设置一致,这样每次
用户登陆都去查询是否为同一个TGT 颁发,来给前端不同的token,来实现单点登陆
1. 将cas的TGT 存储到redis
引入jar
	<dependency>
		<groupId>org.apereo.cas</groupId>
		<artifactId>cas-server-support-redis-ticket-registry</artifactId>
		<version>${cas.version}</version>
	</dependency>
	添加配置
	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 即可
2. cas 开启监控页面后可以获取 st 和 TGT 的绑定信息
	#是否开启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/dashboard
3. 绑定 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 绑定,之后可以按照自己的逻辑实现.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值