sso的實現一般是會有乙個sso server,也會叫認證中心,同時也會有被認證的系統,如oa系統、採購系統等,他們就相當於sso server的client。
為了更形象體現sso,我寫的sso是有三個工程:乙個sso server埠為8081,乙個oa系統埠為8082,乙個採購系統埠為8083。如圖:
流程介紹
在整個sso流程當,有兩個流程非常重要,第乙個是使用者沒有登入系統到登入系統的過程;第二是使用者在乙個系統當中已經登入(例如在oa系統中登入 了),但又想進入另乙個系統(例如進入pro系統)的過程,如果把這兩個過程搞定了,那麼sso也就搞定了。我畫了兩幅圖來說明這兩個過程。
先看使用者沒有登入系統到登入系統的過程,如圖:
1:使用者通過url訪問oa系統。
2:在oa系統中的filter發現這個url沒有ticket(你暫且就把ticket看做是門票),此時就會跳轉到sso server。
3:sso server中的filter發現該客戶端中的cookie中沒有相應資訊,也即是乙個沒有登入的使用者,那麼會跳轉到登入頁面。
4:使用者在登入頁面填寫相應資訊,然後通過post方式提交到sso server中。
5:sso server會校驗使用者資訊(我為了快,我的校驗方式就是要使用者名為:cloud,同時密碼為:cloud),同時在cookie中放username。
6:將生成ticket和username放到jvmcache中,在實際專案應該放到memcached中,它的用處等下分析。
7,8:就是在使用者訪問oa系統的url基礎上加上了乙個ticket引數,這樣跳轉到oa系統。
(此時進入oa系統時,filter發現url是帶ticket的,則filter會根據帶過來的ticket並通過httpclient的形式去呼叫sso server中的ticektservlet,這樣就會返回使用者名稱,其實這個使用者名稱就是從jvmcache拿到的,同時馬上將這個ticket從jvmcache中移除,這樣保證乙個ticket只會用一次,然後把返回的使用者名稱放到session中)
9:session中有了使用者名稱,說明使用者登入成功了,則會去本應該返問的servlet。
10,11:將oa系統返回的檢視給使用者。
第二過程,使用者已經登入成功了,但要訪問另乙個系統,如圖:
1:使用者通過url訪問pro系統。
2:在pro系統中的filter發現這個url沒有ticket,此時就會跳轉到sso server。此時,由於使用者登入了,所以cookie中有相應的資訊(例如使用者名稱),此時sso server中的filter會生成乙個ticket。
3:將生成的ticket和username放到jvmcache中。
4:就是在使用者訪問pro系統的url基礎上加上了乙個ticket引數,這樣跳轉到pro系統。
(此時進入pro系統時,filter發現url是帶ticket的,則filter會根據帶過來的ticket並通過httpclient的形式去呼叫sso server中的ticektservlet,這樣就會返回使用者名稱,其實這個使用者名稱就是從jvmcache拿到的,同時馬上將這個ticket從jvmcache中移除,這樣保證乙個ticket只會用一次,然後把返回的使用者名稱放到session中)
5:session中有了使用者名稱,說明使用者登入成功了,則會去本應該返問的servlet。
5,7:將pro系統返回的檢視給使用者。
單點登入 方案2
1 為什麼要做sso?2 如何實現sso?sso有以下幾種方式實現 3 sso實現機制 以下是我們當前sso的時序圖 sso系統生成ticket並跳轉 子系統換票 4 如何實現統一退出 當子系統換票拿ticket去sso獲取使用者資訊的時候,會獲取到2個引數 ptoken ptlogout。那麼這2...
同域下單點登入分析 單點登入講解(2)
本專案主要講解的是單點登入系統的原理及其實現。本章主要講解的是同域下單點登入分析。流程圖雖然看著複雜,但大家不要被嚇到啦 請大家參照著流程路,聽 細細道來 1 未登入訪問業務系統 由於沒有token,客戶端filter控制其進行登入操作,並將原始的url作為請求的引數。2 使用者執行登入操作 進入服...
OAuth2 單點登入
簡介 oauth open authorization 是乙個開放標準,允許使用者授權第三方應用訪問他們儲存在另外的服務提供者上的資訊,而不需要將使用者名稱和密碼提供給第三方應用。oauth2是oauth協議的延續版本,oauth1已經被廢棄,現在oauth2是用於授權的行業標準協議。1.四個角色 ...