前言
今年5月入职一家公司,主要负责devops平台建设及开发,在之前的平台中,对接了公司统一用户中心,选择了keycloak开源中间件做为认证中心,各个子系统都通过SSO实现单点等,部分系统还适配OIDC进行身份认证
原有系统交互流程中,某两个系统单点实现方式是通过keycloak SPI机制实现的,可能OIDC某些东西没有处理好【实在看不懂源码】,后改为通过模拟keycloak原有登录来实现单点问题,统一存储token
源码
keycloak是指定版本在源码基础上进行改变的,有个好消息:至少源码还在,上次更新差不多快2年啦,真的是个忧伤的故事
拿到源码的那一刻,瞬间懵逼,无论如何各种编译通不过,项目不能启动,各种论坛百度进行搜索源码
QQ搜索keycloak相关群,一共就两个,其中一个还是一个广告群:
心里顿时拔凉拔凉的,大家以后选择中间件还是不要选择国内用得比较少的,不然出了问题搞不懂呀
接下来问题得解决呀,只有硬着头上呀,先大概看了下keycloak每个模块具体是干啥,大概的代码流转是如何的。
高潮
百度、谷歌各种搜索,总算是代码通过了编译,找到相应的启动类,配置好JDBC进行编译启动
刺激的事情来啦:mvn install -Pdistribution 执行完这段代码后,现有的测试环境数据表结构全部进行了初始化,是的,测试环境直接崩溃啦
高潮还在继续:这下完犊子啦,看了测试环境的mysql,binlog日志也没开启,意味着数据找不回来,咋办呢,还能咋办呢,先把测试环境搞好吧
通过两天的奋斗,中午午觉不敢睡,总算把测试环境恢复啦,这也算对keycloak进一步的熟悉啦。
第一件事情就是把测试环境能够正常运行的数据进行备份,一次性备份到两个库,数据丢了真的好可伶。
完成
通过前面的跌跌撞撞,也算对keycloak有了一些了解,然后通过idea的debugger一步步的调试,确定代码流程,最终确定模拟改造方案
源代码改造完成后接下来又是一个大工程,把现有改过的代码部署到测试环境,之前的脚本也不能运行,然后一步步改脚本,这样的脚本还有好几个
接下来就是通过k8s在测试环境进行启动,然后在业务系统中修改keycloak的接口请求地址,业务系统继续进行修改,这里每个业务不一样就不细说啦
最终,最终,通过两周的努力,算是完成这个功能啦,坐等上线。
总结
说起源码改造可能很多小伙伴比较怂,我刚开始也是,但是无知者无畏,心态要好,都是Java写的,怕个啥,我也是学Java的,哈哈
keycloak源码中用到了很多设计模式,所以代码阅读可调试起来有些困难,同一个接口都有很多个实现类
尽可能调试过的地方都增加上自己能看懂的注释,方便自己下次调试,或者其他开发者阅读代码
因为无知,所以在改动任何很细节的方面,都是先把原因的数据进行备份,如数据库、配置文件、代码分支等等,方便出了问题可以快速的回滚
上生产要做好上线流程演练,尽可能的多思考,像类似于这种认证中间件,肯定很多系统都有依赖,要对业务有更多的了解和把控
通过这次改造最终解决了他们反馈了很久的问题,内心成就感爆棚