基于Session共享的单点登录或通行证系统方案
本文主要描述如何基于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
本文和代碼只是簡單介紹了原理,開發一個健壯的單點登錄系統還有很多工作要做,這里只是簡單介紹一下原理起到一個拋磚引玉的作 用。
總結
以上是生活随笔為你收集整理的基于Session共享的单点登录或通行证系统方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于JSON Web Tokens的单点
- 下一篇: java信息管理系统总结_java实现科