SSO單點登陸之跨域問題

第一次寫博客,與你們共勉.跨域

這裏用到的原理其實很是簡單,將cookie存在一個公共的站點的頁面上就能夠了,這裏咱們管那個站點叫主站S.瀏覽器

先說說所謂的跨域緩存

環境1:a.xxx.com須要跟b.xxx.com實現跨域,這種比較簡單,只須要設置cookie的域名關聯域就能夠了 cookie.Domain = "xxx.com",這樣兩個域名間的cookie就能夠互相訪問,實現跨域.cookie

環境2:a.aaa.com須要跟b.bbb.com實現跨域,這種不一樣域名的狀況下,想要實現就必須換種方式了.session

 在這裏我將引入第三者,s.sss.com這個站點,就是某個瀏覽器同時打開了這3個站點,咱們訪問A站點,先判斷自身是否登陸,若是session爲空,就重定向到S站點,判斷S站點上面是否有cookie,若是S站點上面也沒有cookie,則由S站點重定向到A站點的登陸頁.ui

 這樣咱們就實現了第一步,S站作的的就是隱藏在幕後,子站先判斷本身是否存在session,若是不存在,就重定向到主站S上面去驗證.線程

第二步,驗證登陸信息合法性.這裏我引入token(令牌),網上有不少資料,描述token的傳遞,工做方式是這樣,A登陸成功,保存自身的session,重定向到S,S在本身站點保存一個session跟cookie,session保存token對象{tokenID,userName,startTime,endTime},cookie保存tokenID,tokenID是一個Guid,把token對象緩存在集合裏面,另起一個線程,根據endTime(過時時間)來按期清理集合列表,重定向到A的時候再將tokenID傳遞過去,拿到tokenID後,進入驗證環節,S站有提供一個接口,根據tokenID獲取token對象,若是獲取到對象,且沒有失效,則tokenID合法,跳入index頁面.狀況2,A登陸,直接打開B,這時候B自身沒有session,會主動請求主站,主站會返回cookieID(S站存在客戶端的cookie),這個時候再走驗證環節,若是經過,則B根據token對象建立自身的session,再跳入index.對象

在這裏整個單點登陸就已經成功了,接下來附上流程圖:blog

前面流程圖,太醜了,這裏補上一張,但願有所幫助.token

源碼:

SSO單點登陸

說明:新建2個站點xxx-xxx.com(主站),yyy-yyy.com(子站),修改hosts文件,將這兩個域名都指向127.0.0.1便可.

相關文章
相關標籤/搜索