基于Session共享的单点登录或通行证系统方案
本文主要描述如何基于Session共享來實(shí)現(xiàn)單點(diǎn)登錄。
假設(shè)有兩個(gè)應(yīng)用www.example.com, passport.example.com。本文以SpringSession和Redis來實(shí)現(xiàn)相關(guān)功能。
用戶訪問passport.example.com,輸入用戶名和密碼認(rèn)證成功后,在服務(wù)端建立會話,SESSIONID以cookie形式保存在根域example.com,用戶訪問www.example.com可以讀取到SESSIONID,服務(wù)端根據(jù)SESSIONID從會話中讀取相關(guān)認(rèn)證信息是否已存在,如已存在說明認(rèn)證成功。這是一個(gè)簡單的文字描述,下面貼一下截圖可以更形象的說明整個(gè)過程。
用戶訪問passport.example.com, 這個(gè)時(shí)候用戶尚未登錄
用戶訪問passport.example.com/login,假設(shè)登錄成功
用戶登錄成功后訪問passport.example.com
用戶訪問www.example.com
可以看到雖然跨域了,但是sessionid相同,這是實(shí)現(xiàn)不同應(yīng)用單點(diǎn)登錄的必須條件。
下面看一下redis里面的存儲情況。
以sessionid為key的value是一種hash結(jié)構(gòu)。
通過hget命令可以看到保存在會話中的user和account數(shù)據(jù)。
源代碼
https://github.com/chenhaifeng2016/SpringSessionPassport
本文和代碼只是簡單介紹了原理,開發(fā)一個(gè)健壯的單點(diǎn)登錄系統(tǒng)還有很多工作要做,這里只是簡單介紹一下原理起到一個(gè)拋磚引玉的作 用。
總結(jié)
以上是生活随笔為你收集整理的基于Session共享的单点登录或通行证系统方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于JSON Web Tokens的单点
- 下一篇: windows安装XGBoost