Spring Boot 2.0 集成 Shiro 和 Pac4j CAS 单点登录配置教程 -- 知识铺
一、CAS简介
CAS 是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。
CAS 支持以下特性:
- CAS v1, v2 和 v3 协议
- SAML v1 和 v2 协议
- OAuth v2 协议
- OpenID & OpenID Connect 协议
- WS-Federation Passive Requestor 协议
- 通过 JAAS, LDAP, RDBMS, X.509, Radius, SPNEGO, JWT, Remote, Trusted, BASIC, Apache Shiro, MongoDb, Pac4J 等组件进行身份验证
- 将身份验证委派至 WS-FED, Facebook, Twitter, SAML IdP, OpenID, OpenID Connect, CAS 等地方
- 通过 ABAC, Time/Date, REST, Internet2 的 Grouper 等因子进行身份验证
- 通过 Hazelcast, Ehcache, JPA, Memcached, Apache Ignite, MongoDb, Redis, DynamoDb, Couchbase 等工具进行 HA 集群部署
- 由 JSON, LDAP, YAML, JPA, Couchbase, MongoDb, DynamoDb, Redis 等工具支持的应用程序注册
- 通过 Duo Security, YubiKey, RSA, Google Authenticator 等因子进行多因子身份验证
- 用于管理日志记录、监控、统计、配置和客户端注册等的管理UI
- 密码管理和密码策略实施
二、spring boot 2.0 集成 shiro 和 pac4j cas单点登录
参照:
spring boot 2.0 集成 shiro 和 pac4j cas单点登录
网上的资料比较少,都是互相复制、粘贴,本人懒得粘贴,自己去原网址去阅读!
注意:以上参考资料本人尝试了下,单点登出无效!!!
三、解决单点登出失效问题
以下截取部分ShiroConfig配置类代码
|
|
1.单点登出流程
2.排查单点登出客户端cas.callbackUrl是否出现localhost
-———————————————–划重点(开始)-———————————————–
- client-host-url支持域名、主机名、IP地址。CAS服务端对client-host-url有严格的校验方法(包括正则校验、顶级域名校验、IPv4、IPv6校验)。只要搞清楚原理,你会发现官方的考虑还是很周全的,一般情况下,根本不需要自己重写具体实现类。
|
|
- 域名校验(含顶级域名校验)
|
|
- 主机名校验
对于localhost和localhost.localdomain,要想验证通过,一定要在CAS服务端配置以下属性。否则配置cas.callbackUrl配置为localhost会导致单证登出不生效!
|
|
- IP校验
以IPv4为例,可配置127.0.0.1,没什么可讲的!
客户端示例:
|
|
总结:域名配置要按规矩来,不要像我一样配置成cas.example.client,查错查半天!!!
-———————————————–划重点(结束)-———————————————–
如果想禁用url校验,可以通过自己实现接口SingleLogoutServiceLogoutUrlBuilder,代码如下:
|
|
3.排查Pac4jConfig文件SessionStore类型
以下截取Pac4jConfig配置文件部分内容
|
|
问:为什么不能用ShiroSessionStore实现类?
答:因为io.buji.pac4j.context.ShiroSessionStore#getTrackableSession方法返回值始终为null,CAS客户端源码打断点查看你就明白了!
|
|
附:
- 1.cas.callbackUrl配置成localhost时错误日志
|
|
- 使用io.buji.pac4j.context.ShiroSessionStore类作为session存储实现类时
|
|
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240428/Spring-Boot-2.0-%E9%9B%86%E6%88%90-Shiro-%E5%92%8C-Pac4j-CAS-%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com