統一登錄門戶系統

隨着等保2.0和密評工作的深入推進,各政企單位的應用系統建設會向着更安全、更標準方向發展。

爲了推進整合信息共享,破除各系統之間的壁壘,首先要建設的就是統一登錄門戶系統。

常見的統一登錄要求,還是基於一個統一的入口,由統一登錄入口完成登錄後,可以自由訪問其他系統,而其他系統的用戶登錄應跳轉到統一登錄入口。

可能存在的問題:

1.用戶系統如何建立,如何解決存量用戶。

2.應符合等保要求和國密要求。

 

一種簡單的統一登錄系統,在主域名中設置cookie信息,保證在訪問其他子域名時也帶上cookie,通過cookie獲得用戶的身份信息。知識點如下:

1.基於cookie用戶登錄,cookie和session的關係

2.cookie的domain(域)信息

一、基礎知識

1.1 cookie

cookie是http協議的產物,由server生成,通過http response發送給webbrowser,webbrowser存儲在用戶本地的文件,在下一次訪問同一url時候,在http header中攜帶cookie一起發送到服務器端。cookie採用key-value的數據結果。

在OSI 網絡模型中,會話層在第五層,我們熟悉的Http、FTP、SMTP是TCP/IP網絡協議的應用層協議。

Http是一種無狀態的連接協議,本身並沒有提供會話協議。通過cookie方式,可以爲http添加會話信息。

如何理解,Http是一種無狀態的連接協議。當用戶的一次訪問請求結束後,後端服務器就無法知道下一次來訪問的還是不是上次訪問的用戶。另一種情況,在一個NAT的網絡中,有10個用戶通過NAT方式訪問網絡,那麼這10個用戶的ip都是一樣,10個用戶訪問Web服務器時,在服務端無法區分這10個用戶。

當一個web系統,需要會話信息時,可以在用戶登錄時,在cookie中保存用戶名。這樣在下一次訪問時,cookie信息會放在http header中,隨着http請求發送到服務端,起到會話標識的作用。即同一個客戶端發出的請求,每次發出的請求都會帶有上一次訪問時服務端設置的信息,這樣服務端就可以根據之前存入 Cookie 的值來做相應的處理。

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Cookie cookie = new Cookie("mcrwayfun",System.currentTimeMillis()+"");
        // 設置生命週期爲MAX_VALUE
        cookie.setMaxAge(Integer.MAX_VALUE);
        resp.addCookie(cookie);
    }

1.2 cookie域

產生Cookie的服務器可以向set-Cookie響應首部添加一個Domain屬性來控制哪些站點可以看到那個cookie,例如下面:

Set-Cookie: name="wang"; domain="m.zhuanzhuan.58.com"

如果用戶訪問的是m.zhuanzhuan.58.com那就會發送cookie: name="wang", 如果用戶訪問www.aaa.com(非zhuanzhuan.58.com)就不會發送這個Cookie。

cookie的路徑 Path

Path屬性可以爲服務器特定文檔指定Cookie,這個屬性設置的url且帶有這個前綴的url路徑都是有效的。

例如:m.zhuanzhuan.58.com 和 m.zhaunzhuan.58.com/user/這兩個url。 m.zhuanzhuan.58.com 設置cookie

Set-cookie: id="123432";domain="m.zhuanzhuan.58.com";

m.zhaunzhuan.58.com/user/ 設置cookie:

Set-cookie:user="wang", domain="m.zhuanzhuan.58.com"; path=/user/

但是訪問其他路徑m.zhuanzhuan.58.com/other/就會獲得

cookie: id="123432"

如果訪問m.zhuanzhuan.58.com/user/就會獲得

  cookie: id="123432"
  cookie: user="wang"

二、cookie實現單點登錄

正常情況下,同一個一級域名下的兩個二級域名也不能交互使用Cookie,比如test1.mcrwayfun.com和test2.mcrwayfun.com,因爲二者的域名不完全相同。如果想要mcrwayfun.com名下的二級域名都可以使用該Cookie,需要設置Cookie的domain參數爲.mcrwayfun.com,這樣使用test1.mcrwayfun.com和test2.mcrwayfun.com就能訪問同一個cookie。

在這種單點登錄模型中,登錄系統採用cookie保存登錄信息,並設置cookie domain域爲一級域名,在訪問二級域名時,服務端也會獲得用戶的登錄信息,實現了統一登錄的功能。

三、session和cookie

cookie 缺點

  1. 每次請求都會攜帶全部的 Cookie 信息,容易造成不必要的帶寬浪費。

  2. 每個瀏覽器對 Cookie 在同一個域名下的個數和每個 Cookie 的總大小(4kb)都有相應的限制。

  3. 數據存儲在客戶端,容易被攔截篡改,不安全。

  4. 客戶端可以禁用 Cookie,導致功能失效。

  5. 難於管理,大型系統裏每個應用都會有自己的 Cookie,加上以上的限制,容易出現數據被截取,導致數據丟失。

Session(PHP 後端爲例,java是一樣的)

  1. 服務端(默認設置)接受請求時,先查看 $_COOKIE 中是否存在 name 爲 PHPSESSID 的鍵值對(value 爲服務端生成的 SESSION_ID:bebfaf6c745c1a6e5f341baf2178113b)。

  2. 若不存在(第一次請求),將會自動生成 SESSION_ID,寫入到 $_COOKIE 數組中(name 爲 PHPSESSID, value 爲 SESSION_ID),然後通過響應頭返回給瀏覽器。

  3. 若存在(非第一次請求),則根據 value 值到設置的目錄下獲取相應的文件,反序列化並寫入到 $_SESSION 數組供後續使用。

  4. 當服務端進行設置時,此$_SESSION 只會維持在內存中。當腳本執行結束時,將會自動把 $_SESSION 序列化後寫入到 SESSION_ID 對應的文件中(創建或覆蓋)。(腳本執行即http訪問)

  5. 通過POST獲取用戶的用戶名密碼,當驗證成功後,將用戶身份信息保存在$_SESSION中,通過cookie和session實現用戶登錄。

優點

  1. 只將會話標識符放到 Cookie 裏,減少帶寬的傳輸。

  2. 可以存儲大量的信息,基本沒有空間上的限制。

  3. 數據存放在服務端,安全。

  4. 可以統一集中式管理。

聯繫

SESSION 爲了識別會話,需要傳輸一個唯一的 SESSION_ID 到客戶端。一般情況下,都是藉助 Cookie 來傳遞,當然也可以通過其他方式進行傳遞。

Session 安全延伸

以上分析得出, Session 需要通過 SESSION_ID 來識別客戶端,這就會導致一個安全隱患。當 SESSION_ID 落入第三者時,服務端將無法分辨出是否是合法的請求。SESSION_ID通常爲一串隨機值,除了防止泄露,還要防止通過暴力方式猜解出來。

一個簡單的防禦措施就是:每次請求時都生成一個新的 SESSION_ID 關聯到對應的數據並將老的 SESSION_ID 刪除。

百度BDUSS可以看做是一個session_id,HttpOnly屬性保證javascript不能修改這個值。

四、全局Session

採用Redis替代中間件session存儲,實現單點登錄。

五、採用cookie實現統一登錄架構

  1. 登錄login頁面,生成用戶信息並保存,保存在持久化UserInfo_Server數據庫或Redis中。
  2. 將用戶信息的key,寫入到cookie中,設置domain爲頂級域名。
  3. 瀏覽其他頁面,會攜帶cookie發佈到後端server,server向UserInfo_Server查詢用戶認證信息,實現用戶登錄。
  4. 用戶註銷,任一個server都可以設置cookie的有效期爲0,刪除cookie,並調用UserInfo_Server接口修改數據庫中的認證信息。
  5. key的生成要隨機,UserInfo接口校驗數字簽名,保證信道加密cookie不能被竊取

 

 

參考:

  1. 這一次帶你徹底瞭解Cookie https://www.cnblogs.com/zhuanzhuanfe/p/8010854.html 
  2. 深入理解Cookie https://www.jianshu.com/p/6fc9cea6daa2
  3. Cookie 和 Session https://segmentfault.com/a/1190000008928086
  4. SpringBootSecurity學習(09)網頁版登錄配置Session共享 https://segmentfault.com/a/1190000020544320

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章