专栏名称: Java仓库
专注Java全栈开发,分享实用技术干货。
TodayRss-海外RSS稳定源
目录
今天看啥  ›  专栏  ›  Java仓库

面试题:说说单点登录的实现原理吧?

Java仓库  · 公众号  · 互联网安全  · 2025-07-08 10:50
    

主要观点总结

文章主要介绍了单点登录在现代系统架构中的应用和解决方案,以及作者在实际应用环境中遇到的一些问题及解决方案。文章从共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案、B/S多域名环境下的单点登录处理和安全问题等方面进行了详细阐述。

关键观点总结

关键观点1: 共享Session是实现单点登录的直接和简单方式,但在用户验证、用户信息管理与业务应用分离的场景下会遇到问题。作者采用了基于Redis的Session共享方案,但存在扩展性问题。

共享Session是通过将用户认证信息保存于Session中,以Session内存储的值为用户凭证。在单个站点内很容易实现,但在多子系统环境下需要共享Session。作者采用了基于Redis的Session共享方案,但这一方案存在扩展性问题,且对Session的使用有诸多限制。

关键观点2: 基于OpenId的单点登录解决了C/S与B/S结合系统的身份验证问题,但存储和传递OpenId在B/S模式下较为困难。

OpenId存放于客户端,用户登录子系统时将OpenId传送到服务端进行验证。这种方法多用于C/S与B/S相结合的系统。但在B/S模式下,存储和传递OpenId较为困难,需要引入基于Cookie的OpenId存储方案。

关键观点3: 基于Cookie的OpenId存储方案解决了B/S模式下OpenId的存储和传递问题,但存在跨域问题。

通过使用顶级域名Cookie作为OpenId的载体,解决了B/S模式下OpenId的存储和传递问题。但这一方案假设所有子系统都是同一个顶级域名,而在实际生产环境中可能存在多个域名,需要解决跨域问题。

关键观点4: 在B/S多域名环境下,通过JSONP接口实现单点登录的跨域处理。

在多个顶级域名的情况下,无法直接共享各个子系统的OpenId。处理跨域问题,可以通过JSONP接口将用户OpenId传给业务子系统,实现单点登录。

关键观点5: 安全问题,包括OpenId的安全性和用户体验的矛盾,以及多终端登录下的OpenId失效问题。

在实现单点登录时,需要注意安全问题,如OpenId的安全性和用户体验之间的矛盾,以及多终端登录下的OpenId失效问题。作者采用了单用户多OpenId的解决方案,每次用户通过用户名/密码登录时产生一个OpenId保存在Redis里,并设定过期时间,以解决这一问题。


免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
文章地址: 访问文章快照