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