基于Session共享的单点登录或通行证系统方案

来源:互联网 发布:服务器地址、远程端口 编辑:程序博客网 时间:2024/05/16 19:16

本文主要描述如何基于Session共享来实现单点登录。

假设有两个应用www.example.com, passport.example.com。本文以SpringSession和Redis来实现相关功能。

用户访问passport.example.com,输入用户名和密码认证成功后,在服务端建立会话,SESSIONID以cookie形式保存在根域example.com,用户访问www.example.com可以读取到SESSIONID,服务端根据SESSIONID从会话中读取相关认证信息是否已存在,如已存在说明认证成功。这是一个简单的文字描述,下面贴一下截图可以更形象的说明整个过程。

用户访问passport.example.com, 这个时候用户尚未登录


用户访问passport.example.com/login,假设登录成功



用户登录成功后访问passport.example.com


用户访问www.example.com


可以看到虽然跨域了,但是sessionid相同,这是实现不同应用单点登录的必须条件。


下面看一下redis里面的存储情况。


以sessionid为key的value是一种hash结构。

通过hget命令可以看到保存在会话中的user和account数据。


源代码

https://github.com/chenhaifeng2016/SpringSessionPassport


本文和代码只是简单介绍了原理,开发一个健壮的单点登录系统还有很多工作要做,这里只是简单介绍一下原理起到一个抛砖引玉的作 用。




0 0
原创粉丝点击