十一点三刻,茶又凉了,这是今晚第二回续了水放着,索性不理它。屏幕上开着 dev.to 上一篇对比文章,讲自建 Keycloak 和托管 Keycloak 的分别,权限和凭据究竟攥在谁手里。文章写得踏实,我读着读着却走了神,想到的不是密码哈希,是“保管”这两个字。
很多年前在另一条河上,我替一个小组管过一个内部账号系统,那会儿还没有 Keycloak,一张用户表加一列盐,谁也没觉得这算个事儿。后来有一晚半夜被叫起来,说备份盘挂了。盘里存的倒不是什么机密,就是那份谁都没正经测过能不能恢复的备份。我记得凌晨四点坐在机房外面,手里捏着一罐早就凉透的咖啡,心里明白了一件事:真正危险的往往不是那列盐算出来的哈希,是“以为有人管着”的那点宽心。文章里那位读者说得对,“以为有人管着”的边界,常常藏在没人去测过的地方。原文里那位在小 VPS 上自建的朋友,栽的也正是这件事,备份从没做过恢复演练。这话实在得不像技术文章评论区里能见着的。
所以我看这类对比,眼睛先落在“责任”那一栏,不是算法那一栏。Keycloak 二十四换 pbkdf2-sha512、二十五以后默认 Argon2、FIPS 场合另算,这些我都知道,也都无所谓,换算法这种事机器替我们操心就行。真该操心的是这份东西放在谁的库里,谁的数据库管理员能碰,谁的备份躺在哪块盘上,出了事谁半夜接电话。文章里那句“哈希只解决泄露这一种场景,挡不住一台已经被攻陷的身份服务器”,说得克制,我心里给它添了句注解:被攻陷的服务器跟被攻陷的人一样,最怕的不是外面的人闯进来,是自己人早就不当回事了。
说到这儿得岔一句。前两天翻抽屉找一张旧发票,翻出一串早就不用的口令,写在便签上,字迹潦草,有几个连我自己都认不出。那会儿我还觉得记在纸上比记在脑子里保险,如今回头看,倒像是从前的我在替现在的我保管一份谁都不再需要的东西。保管这件事,靠的是持续的在意,不是一次性交付。
托管方案许诺的正是这一点,帮你把持续的在意接过去。Skycloak 那种跑上游 Keycloak 的服务,基础设施、自动更新、数据库运维和备份都归它管,套餐按基础设施算不按用户数算,还留着 realm 导出这条路,日后想搬也搬得动。这话我信一半。信的那半是确实有人替你在凌晨三点盯着那台机器;不信的那半,文章自己也认了,托管并没有把安全责任全挪走:认证流程怎么配、realm 怎么设、管理员入口怎么护着、重定向 URI 怎么校验、新用户怎么进来、密码忘了怎么找回,还得自己拿主意。人家替你守的是机房的门,屋里怎么摆家具、钥匙分给谁,仍旧是你的事。
我忽然觉得,这跟请人看家差不多。你可以雇个可靠的物业,省得自己盯水管漏不漏,却不能因此忘了自己家有几扇窗。文章里那位建议做登出演练的读者,提的法子最见功力:登录两个应用,从一个登出,再看另一个的会话还在不在。这种问题,问一百遍“你们安全吗”都问不出来,非得自己动手比划一遍。责任的清单写在纸上永远比划在地上容易。
再往深说一层,我看这类文章最在意的其实不是选哪个,是自己有没有把该问的问题问出口。文章末尾那串追问,能不能配出想要的认证流程、身份数据能不能导出、备份怎么保证、谁负责安全更新、厂商宕机了怎么办,还有评论区那位说的,哪天涨价或者干脆关停,realm 的导出和迁移路径在谁手里;这些问句本身比答案值钱。一个团队要是在选型之前能把这些话一条条问出来,多半已经知道自建和托管的取舍落在哪了;问不出来的,选哪个都悬。
茶是真凉透了,我也没再去热。窗外这条街安静得能听见远处偶尔一辆车驶过去的声音,让我又想起那罐凌晨四点的咖啡,还有那句“以为有人管着”。两个念头隔了这么多年,居然还是同一件事:不是密码怎么存,是谁、在什么时候、有没有真的去看一眼。文章里那些算法名、表名、套餐名,睡一觉大概就忘了,倒是这一句,我大概还会记上一阵子。
天快亮了,茶还搁在桌角,我打算就这么留着,明早起来再倒。
