栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
	
		org.apereo.cas
		cas-server-support-redis-ticket-registry
		${cas.version}
	
	添加配置
	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 绑定,之后可以按照自己的逻辑实现.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531440.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号