SSO 全稱 Single Sign On,單點(diǎn)登錄。
CAS 全稱 Central Authentication Service,中心認(rèn)證服務(wù)祠斧。
CAS 是實(shí)現(xiàn) SSO 的一種著名的方案。
使用情景:為了在多個(gè)不同的系統(tǒng)使用同一用戶和密碼拱礁,從而實(shí)現(xiàn)一處登錄琢锋,處處登錄辕漂。
實(shí)現(xiàn)機(jī)制
- 用戶首次登錄系統(tǒng) A,會(huì)重定向到 CAS吴超。
- 用戶在 CAS 渲染的表單填寫(xiě)賬號(hào)密碼钉嘹,如果認(rèn)證通過(guò),CAS 將會(huì)做幾件事:
- 建立會(huì)話鲸阻。
- 生成一個(gè) ticket 跋涣。
- 把 ticket 放在 URL 中,重定向到系統(tǒng) A鸟悴,同時(shí)把 cookie 發(fā)給瀏覽器陈辱。
- 系統(tǒng) A 收到 ticket 后向 CAS 認(rèn)證,如果認(rèn)證通過(guò)细诸,則認(rèn)為用戶已經(jīng)登錄性置。
- 系統(tǒng) A 再給用戶發(fā)送 cookie,這樣用戶就可以訪問(wèn)系統(tǒng) A 中受保護(hù)的頁(yè)面揍堰。
注意:第一個(gè) cookie 是用來(lái)標(biāo)記用戶已經(jīng)登錄,第二個(gè) cookie 是系統(tǒng) A 發(fā)給用戶的嗅义,用來(lái)讓用戶可以訪問(wèn)受保護(hù)頁(yè)面屏歹,而其他系統(tǒng)是不能接觸到這個(gè) cookie 的。
如果用戶在此基礎(chǔ)上要登錄系統(tǒng) B之碗,流程與登錄系統(tǒng) A 差不多蝙眶,只是少了填寫(xiě)表單這一步:
- 用戶首次登錄系統(tǒng) B,會(huì)帶有已登錄的 cookie 重定向到 CAS褪那。
- 認(rèn)證已通過(guò)幽纷,CAS 將會(huì)做幾件事:
- 建立會(huì)話。
- 生成一個(gè) ticket 博敬。
- 把 ticket 放在 URL 中友浸,重定向到系統(tǒng) B 。
- 系統(tǒng) B 收到 ticket 后向 CAS 認(rèn)證偏窝,如果認(rèn)證通過(guò)收恢,則認(rèn)為用戶已經(jīng)登錄。
- 系統(tǒng) B 再給用戶發(fā)送 cookie祭往,這樣用戶就可以訪問(wèn)系統(tǒng) B 中受保護(hù)的頁(yè)面伦意。
單點(diǎn)退出
實(shí)現(xiàn)效果,一處退出硼补,處處退出驮肉。
當(dāng)系統(tǒng) A 向 CAS 認(rèn)證 ticket 時(shí),如果認(rèn)證通過(guò)已骇,除了系統(tǒng) A 認(rèn)為用戶已登錄外离钝,CAS 也會(huì)注冊(cè)系統(tǒng) A 票编。
當(dāng)用戶在任一個(gè)系統(tǒng)退出時(shí),認(rèn)證服務(wù)器會(huì)通知已注冊(cè)的所有系統(tǒng)奈辰,把用戶的 cookie 干掉栏妖。