| 知乎专栏 |
从业26年,我经历了 Session,Redis token, JWT, Oauth,OpenID……等各种认证与授权方案。早些年我也很喜欢追随大厂的技术路线:,Kubernets, gRPC……
如今人变得成熟了,不再一味追求新技术,每次架构选型,更多是考虑用户需要什么,产品如何快速落地,安全性,扩展性,鲁棒性……
我们选择了 HTTP Basic/Digest 认证 + Session 方案
放弃了 Oauth 和 JWT,甚至没有 Login 页面,登录对话框是客户端浏览器的,也没有退出和注销按钮,用户必须关闭浏览器退出。
一切变得简单了
HTTP Auth 是 Web Server 级别的认证,不需要写额外代码,他还有一个其他方案不具备的优势。能把联通静态资源一起纳入认证范畴,哪怕是 css,js,image 都必须登录之后才能访问。机遇这个特点,HTTP Auth 天然防爬虫,爬虫什么资源都拿不到。
回到 Session 方案,用户状态信息在服务器端保存,而 JWT 就像泼出去的水,你对用户端失去了控制。经常关注 Spring Session 的小伙伴会发现它还在持续更新,也就是 Session 并没有死,人们也没有放弃他。
当年我们选择放弃他,是因为大型网站的 Session 开销成本巨高,Session 是大型网站的瓶颈主要来源。而如今我们做的系统更多是小而美,企业级的产品,并不是海量互联网级别应用。在考虑系统架构的时候,我们没有必要把互联网产品思维套用在企业应用上。机遇这个思维,我决定回到 Session 方案。
目前我们已经在多个企业级产品中使用 HTTP Auth + Spring Session + Spring Security 解决安全问题。