SSO
SSO(Single Sign On)即單點登錄。把兩個及以上的產(chǎn)品中的用戶登錄邏輯抽離出來颠放,達到只需要登錄一次就可以訪問不同的產(chǎn)品的功能伪朽。這樣可以帶來很多的好處帮毁,比如避免重復開發(fā)溜宽,提升用戶體驗...
CAS
SSO 只是一種架構(gòu)脯厨,而 CAS 則是這種架構(gòu)的一種具體實現(xiàn)。CAS(Central Authentication Service)中心授權服務坑质,是一種開源協(xié)議,分為1.0和2.0版本临梗。1.0 是基礎模式涡扼,2.0 為代理模式,適用與非 web 應用的SSO盟庞,1.0 適用于 web 應用吃沪。
CAS 1.0 相關概念
術語
- Client:用戶
- Server:中心服務器,即 SSO 中負責登錄的 service
- Service:需要 SSO 的各個服務什猖,對應的是不同的業(yè)務 service
票據(jù)
TGT:Ticket Granting Ticket
TGT 是CAS 為用戶簽發(fā)的登錄 ticket票彪,也是用于驗證用戶登錄成功的唯一方式。 TGT 封裝了 Cookie 值以及 Cookie 值對應的用戶信息不狮,CAS 通過 Cookie 值(TGC)為 key 查詢緩存中有無 TGT(TGC:TGT(key:value))降铸,如果有的話就說明用戶已經(jīng)登錄成。
TGC:Ticket Granting Cookie
CAS 會將生成的 TGT 放在 session 中摇零,而 TGC 就是這個 session 的唯一標識(sessionId)推掸,可以認為是 TGT 的key,為 TGT 就是 TGC 的 value驻仅,TGC 以 cookie 的形式保存在瀏覽器中谅畅,每個請求都會嘗試攜帶 TGC。(每個服務都會在 session 和 cookie 中保存對應的 TGT 和 TGC)
ST:Service Ticket
ST 是當用戶訪問某一服務時提供的 ticket噪服。用戶在訪問其他服務時毡泻,發(fā)現(xiàn)沒有 cookie 或 ST ,那么就會302到 CAS 服務器獲取 ST粘优。然后會攜帶著 ST 302 回來仇味。
借助官網(wǎng)的 Sequence Diagram 來看看整個流程:
- 當用戶未登錄情況下訪問非 CAS 服務(service-1)時,CAS 會進行攔截發(fā)現(xiàn)當前賬號未認證(沒有攜帶JSESSIONID或者ST)敬飒,于是 302 到 CAS 服務器
- CAS 服務器會 check 瀏覽器是否有 TGC 邪铲,發(fā)現(xiàn)沒有,說明用戶真的沒有登錄過无拗,于是302到登錄葉敏啊
- 用戶提交登錄信息到 CAS 服務器带到,認證成功
- 認證成功后,CAS 會保存一個 session,在瀏覽器保存一個 CASTGC cookie揽惹,然后302到最初訪問的那個URL被饿,URL上會攜帶一個 ST 參數(shù)
- 請求抵達該該服務(service-1)時,發(fā)現(xiàn)有 ST 參數(shù)搪搏,那么會 302 到 CAS 服務器驗證 ST 是否有效
- 如果有效那么該服務(service-1)就會在(service-1)中生成該服務對應的 session狭握,然后返回瀏覽器,生成 JSESSIONID cookie疯溺,并攜帶 JESSIONID cookie 302 到最初的那個請求