單點登陸的理解

2021-08-09 06:27:46 字數 1705 閱讀 1671

概念

單點登入(single sign on),簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。

單點登陸大家經常聽說,但是又該如何理解呢?現在將這個概念兩兩拆分解釋

單點

需求一: 賬號在正在裝置a上使用(應用是裝置a上當前活動應用), 若裝置b上用該賬號登入應用,要求裝置a上的賬號立即退出。 解決辦法:

應用客戶端上做個定時服務,定時去檢測服務端儲存的賬號最後登入的裝置號,如果發現非本機裝置號,強制賬號退出,並提示使用者。 需求二:

賬號在正在裝置a上使用(應用是裝置a上當前活動應用),

若裝置b上用該賬號登入應用,不要求裝置a上的賬號立即退出,當應用重新開啟時再自動退出登入。

解決辦法:應用啟動時檢測服務端儲存的賬號最後登入的裝置號,如果發現非本機裝置號,強制賬號退出,並提示使用者。

登陸

以cookie作為憑證媒介

最簡單的單點登入實現方式,是使用cookie作為媒介,存放使用者憑證。

使用者登入父應用之後,應用返回乙個加密的cookie,當使用者訪問子應用的時候,攜帶上這個cookie,授權應用解密cookie並進行校驗,校驗通過則登入當前使用者。

auth via cookie 不難發現以上方式把信任儲存在客戶端的cookie中,這種方式很容易令人質疑:

cookie不安全 不能跨域實現免登

對於第乙個問題,通過加密cookie可以保證安全性,當然這是在源**不洩露的前提下。如果cookie的加密演算法洩露,攻擊者通過偽造cookie則可以偽造特定使用者身份,這是很危險的。

對於第二個問題,更是硬傷。

通過jsonp實現

對於跨域問題,可以使用jsonp實現。

使用者在父應用中登入後,跟session匹配的cookie會存到客戶端中,當使用者需要登入子應用的時候,授權應用訪問父應用提供的jsonp介面,並在請求中帶上父應用網域名稱下的cookie,父應用接收到請求,驗證使用者的登入狀態,返回加密的資訊,子應用通過解析返回來的加密資訊來驗證使用者,如果通過驗證則登入使用者。

auth via jsonp

這種方式雖然能解決跨域問題,但是安全性其實跟把信任儲存到cookie是差不多的。如果一旦加密演算法洩露了,攻擊者可以在本地建立乙個實現了登入介面的假冒父應用,通過繫結host來把子應用發起的請求指向本地的假冒父應用,並作出回應。

因為攻擊者完全可以按照加密演算法來偽造響應請求,子應用接收到這個響應之後一樣可以通過驗證,並且登入特定使用者。

通過頁面重定向的方式

最後一種介紹的方式,是通過父應用和子應用來回重定向中進行通訊,實現資訊的安全傳遞。

父應用提供乙個get方式的登入介面,使用者通過子應用重定向連線的方式訪問這個介面,如果使用者還沒有登入,則返回乙個的登入頁面,使用者輸入賬號密碼進行登入。如果使用者已經登入了,則生成加密的token,並且重定向到子應用提供的驗證token的介面,通過解密和校驗之後,子應用登入當前使用者。

auth via redirect

這種方式較前面兩種方式,接解決了上面兩種方法暴露出來的安全性問題和跨域的問題,但是並沒有前面兩種方式方便。 安全與方便,本來就是一對矛盾。

推薦文章

利用redis來實現身份驗證的一種方法,類似session機制

單點登陸 單點登陸設計

1單點登入基本流程場景1 使用者未登入情況下訪問受限資源 例如 使用者在站點a 登入成功了,這時候使用者再去訪問站點 下的受限資源。private a.do 由於使用者在站點a登入了,那麼在 x.com 域下一定存在authid的cookie,並且redis中一定儲存了使用者的登入資訊。當使用者訪問...

對CAS單點登陸的理解

cas是實現單點登陸的框架。使用者只需要登陸一次就可以訪問所有相互信任的應用系統。cas通過票據之間的傳遞達到目的。首先明確 cas只是控制分布式集群 的單點登陸,並不負責資源許可權的控制 tgt 登陸票據 表示某使用者登陸 整個系統的票據,session實現。對應多個session tgc tgt...

SSO 單點登陸

1.單點登陸概述 單點登入 single sign on 簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。很早期的公司,一家公司可能只有乙個server,慢慢的server開始變多了。每個server都...