sso單點登陸

2021-09-23 17:27:14 字數 1630 閱讀 5352

在乙個企業發展的過程中,用到的系統會慢慢增多,使用人員在多個系統中操作時需要登入各個系統,而且可能每個系統賬號都不一樣,這對使用人員來說很不方便,於是就產生了單點登入,在乙個系統登入其他的系統就不用登陸。

在做單點登入之前先來回顧下單系統登入的操作,首先進入系統登入頁面,填寫登入資訊提交表單,系統後台對賬號密碼進行驗證,驗證通過就會建立session ,然後把sessionid通過cookie傳送給瀏覽器,下次再請求系統時cookie會跟著傳送過去,此時就已經知道該賬號已經登陸了。

那麼既然系統a已經登入認證過了,是不是再請求別的系統b時也就認證通過了呢?

首先要解決的是session共享問題,系統a認證登入過後在伺服器中建立了乙個session對應的當前會話,並把sessionid放到了cookie中返回給了瀏覽器,系統b顯然是沒有系統a的session的,此時可以使用redis 把session快取其中多個系統都共用。

session的問題解決了那麼前端的cookie呢?瀏覽器請求系統a獲得的cookie 是不能跨域請求到系統中b的。

cookie不能跨域,那麼我們可以把這兩個系統放到同一網域名稱下,分為不同的二級網域名稱。比如www.abc.oa.com

和www.abc.hr.com 它們的父級網域名稱 www.abc.com。

但是考慮到多個系統架構不同,語言也可能不同,共享session 有點麻煩,且如果是不同域呢?有沒有更好的方式呢?

此時引入正題,就是由耶魯大學提出的cas(central authentication service)乙個著名的sso解決方案。

流程如下:

使用者訪問a系統,驗證此使用者未登陸。

重定向至cas,cas中也沒有登陸,返回登陸頁面

填寫使用者名稱、密碼,cas進行認證後,產生乙個ticket(隨機字串認證用的)將登入狀態寫入cas的session,返回給瀏覽器cas下的cookie,並將將ticket放入url中返回(如:www.a.com/pagea?ticket=123)

瀏覽器被重定向請求系統a,系統a拿著ticket去cas驗證是否是偽造的,cas認證通過,在cas中註冊系統a建立全域性會話,並通知系統a驗證通過。

系統a建立session,返回給瀏覽器系統a的cookie,並把瀏覽器請求的頁面返回。

再次訪問a系統另乙個受限頁面時因為瀏覽器中已攜帶該域cookie,則直接返回資源給瀏覽器。

驗證後系統b登陸流程如下:

cas的sso實現方式可簡化理解為:1個cookie和n個session。cas server建立cookie,在所有應用認證時使用,各應用通過建立各自的session來標識使用者是否已登入。

st(service ticket)

1、 st只能使用一次

cas協議規定,無論 service ticket驗證是否成功, cas server都會清除服務端快取中的該ticket,從而可以確保乙個service ticket不被使用兩次。

2、 st在一段時間內失效

cas規定st只能存活一定的時間,然後cas server會讓它失效。預設有效時間為5分鐘。

3、 st是基於隨機數生成的

st必須足夠隨機,如果st生成規則被猜出,hacker就等於繞過cas認證,直接訪問對應的服務。

碼農翻身讀後感

SSO 單點登陸

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

SSO單點登陸

一句話,就是能讓各個不同的網域名稱帶回相同的認證資訊即可。實現方法,就是把其中乙個登陸後,把認證的資訊分別儲存在不同網域名稱下的 cookie,當在驗證是否登陸時,驗證 cookie,如果是子網域名稱,這個則直接用 cookie設定作用域為頂級即可。以下說的是不同的網域名稱,其中是用了 script...

單點登陸SSO原理介紹

sso 是乙個非常大的主題,我對這個主題有著深深的感受,自從廣州 usergroup 的論壇成立以來,無數都在嘗試使用開源的 cas kerberos 也提供另外一種方式的 sso 即基於 windows 域的 sso 還有就是從 2005 年開始一直興旺不衰的 saml 如果將這些免費的 sso ...