1. 程式人生 > >單點登入深入解析

單點登入深入解析

1.什麼是單點登入

    如何只需輸入一個平臺上的賬號密碼,登陸後再進入其他平臺不用再次輸入賬號密碼也能自動登陸。這就是單點登入。

2.實現單點登入的三種方式:

   2.1 使用cookie,記錄登入的資料,並且進行加密,通常我們用到的sha加密,不可逆的,密文洩露也無法還原過來,還有就是我們的MD5加密。但是cookie 本身不夠安全,存放在瀏覽器這一端;第二是無法跨域訪問使用同一個cookie ,需要設定頂級域名,才能有效。 第三,是各應用系統使用的技術(至少是web伺服器)要相同,不然cookie的key值(tomcat為JSESSIONID)不同,第四,無法維持會話,共享cookie的方式是無法實現跨語言技術平臺登入的,比如java、php、.net系統之間;

  2.2 SSO認證授權登入

上一種方法有很大的侷限性,如果跨域名,就實現不了,這裡我們可以藉助第三方授權來實現。要實現多個平臺單點登入,前提是多個平臺必須要有一個唯一的賬號,如手機號,郵箱,或使用者名稱,這樣才可以判斷出是哪個使用者。

        SSO認證授權登入的具體實現思路是這樣的:假如公司有兩個不同域名或IP下的管理網站,a.com,b.com,我們想要輸入使用者名稱和密碼登入a.com, 即可自動登入b.com,怎麼實現呢?

        登入a.com後會在a平臺產生會話資訊,如果我們登入b.com,怎麼判斷該使用者已經登入a平臺了,然後自己登入?這裡我們需要藉助第三方平臺來做授權驗證,即c.com,該授權中心維護一套共有的賬號和密碼,當用戶訪問 a.com 後,我們會跳轉到 c.com,並帶上a.com 這個來源訪問地址,在c.com 中判斷是否有登入,如果未登入,則給出登入介面,登入成功後,則產生會話資訊,同時生成一個授權Token,儲存在c.com cookie 中,然後返回給原地址,如果已經登入(即已經授權過了),則拿到cookie中儲存的Token資訊然後回跳到原來的訪問地址,a.com 判斷有Token資訊,則拿著這個Token傳送http請求到c.com,判斷該Token是否有效,如果有效,則返回給使用者資訊,然後a.com拿到資訊後,自動登入a.com。

        當訪問 b.com 時,也會去 c.com 中判斷是否已經授權過了,因為a.com 已經授過權了,則會給b.com 返回授權Token,然後b.com 判斷該Token是否有效,如果有效,則會返回給使用者資訊,b.com 自動登入,這就是單點登入的一個簡單的流程。

2.3.通過重定向實現

         最後一種介紹的方式,是通過父應用和子應用來回重定向中進行通訊,實現資訊的安全傳遞。父應用提供一個GET方式的登入介面,使用者通過子應用重定向連線的方式訪問這個介面,如果使用者還沒有登入,則返回一個的登入頁面,使用者輸入賬號密碼進行登入。如果使用者已經登入了,則生成加密的Token,並且重定向到子應用提供的驗證Token的介面,通過解密和校驗之後,子應用登入當前使用者。