|
我們都知道網(wǎng)易、搜狐等大型門戶都有“通行證”的概念,這個(gè)通行證系統(tǒng)就是今天討論的“單點(diǎn)登錄系統(tǒng)”。其主要特征是多個(gè)站點(diǎn)一個(gè)用戶中心,一點(diǎn)登陸后其他也自動(dòng)登錄,注銷也是。比如我們在126登錄了郵箱,再去163.com就是登陸狀態(tài)。我這里的實(shí)現(xiàn)方案是傳統(tǒng)的cookie方案。希望此文對需要的朋友有用,也希望不足之處大家能夠提出。
SSO的基本功能:
統(tǒng)一登錄
所有站點(diǎn)的登錄都要跳轉(zhuǎn)至SSO來登錄,同時(shí)附帶剛剛請求的url參數(shù),以便登陸后返回。
例如 http://sso.a.com/login?url=http://www.b.com ,登錄之后,我們Response一個(gè)cookie,并且將其domain設(shè)為 a.com頂級(jí)域,這樣只要是同域的站點(diǎn)都可以直接訪問到這個(gè)cookie。
由于cookie不能跨域,所以這里要解決不同域下的cookie問題。解決辦法就是通過JS API來獲取a.com的cookie信息,并通過url傳遞個(gè)b.com。
我們知道ajax是不能跨域訪問的,但是我們可以<script>一個(gè)跨域的JS(這就是JSAPI),所以SSO系統(tǒng)需要提供一個(gè)callback參數(shù),輸出為一段js代碼。
SSO輸出cookie給調(diào)用者,接受callback參數(shù)
var user = Request.Cookies["Username"]; var callback = Request.QueryString["callback"]; if(user!=null) Response.Write(callback+"("+user.ToJson()+")");//ToJson是一個(gè)擴(kuò)展方法,將對象序列化為Json格式
it知識(shí)庫:Single Sign-On(SSO)單點(diǎn)登陸的具體實(shí)現(xiàn)方案,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。