溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SSO登錄原理是什么

發(fā)布時間:2022-01-04 10:51:35 來源:億速云 閱讀:152 作者:柒染 欄目:大數(shù)據(jù)

SSO登錄原理是什么,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

Single Sign-on

SSO是老生常談的話題了,但部分同學(xué)對SSO可能掌握的也是云里霧里,一知半解。本次手撕公司的SSO原理,試圖以一種簡單、流暢的形式為你提供有用的SSO原理。按照本人一貫行文風(fēng)格,我們先說什么是SSO,為什么要提出SSO?

SSO:在多個系統(tǒng)中,只需要登陸一次,就可以訪問其他相互信任的應(yīng)用系統(tǒng),表現(xiàn)的實(shí)際場景:

  • 企業(yè)部署多個website,形成產(chǎn)品套件或產(chǎn)品矩陣,而賬號集中統(tǒng)一管理

  • 用戶一次登陸,即可暢通不同域名下web服務(wù)

CAS

 

今天我們主要講不同頂域下SSO的實(shí)現(xiàn),引出CAS原理,CAS官方:

https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol.html

SSO登錄原理是什么

手繪原理

下圖描述了傳統(tǒng)認(rèn)證過程要素和CAS協(xié)議的認(rèn)證要素:

CAS協(xié)議是專門為CAS開發(fā)的基于票證的簡單而強(qiáng)大的協(xié)議。

  •  CAS Server負(fù)責(zé)認(rèn)證用戶身份并授予對應(yīng)用程序的訪問權(quán)限

  •  CAS Clients保護(hù)CAS項(xiàng)目, 從CAS Server檢索已授權(quán)用戶的身份信息

核心概念:

  • 存儲在CASTGC cookie中的TGT (Ticket Granting Ticket),負(fù)責(zé)用戶在SSO中的會話

  • ST(服務(wù)票證)作為url中的GET參數(shù)傳輸,代表CAS服務(wù)器為特定用戶授予對CASified應(yīng)用程序的訪問

SSO登錄原理是什么

用戶首次訪問website1  

① 用戶訪問website1,website1需要認(rèn)證,用戶當(dāng)前沒有登陸

② website1給客戶端返回302重定向響應(yīng),客戶端重定向到SSO服務(wù)頁:www.sso-website.com?service=https://www.website1.com

# 臨時跳轉(zhuǎn),建議傳參false返回302臨時重定向響應(yīng)
 context.Response.Redirect(ssoURL, false);

用戶并沒有登陸SSO系統(tǒng),所以SSO系統(tǒng)會返回登陸界面

③ 用戶在SSO登陸頁輸入賬戶/密碼

④ 登陸成功,SSO會在客戶端寫入cookie for sso[官方叫CASTGT]并產(chǎn)生一個302重定向響應(yīng),客戶端將重定向到原website1地址,該請求攜帶了SSO此次認(rèn)證成功的ticket

http://www.website1.com?ticket=XXXX-OOOO-XXXX-OOOO

⑤ website1收到以上重定向請求,解析QueryString中的ticket, 向SSO做一次ticket驗(yàn)證;驗(yàn)證通過向客戶端寫入本站的cookie for website1

⑥ 上面第5步,瀏覽器地址會顯示:http://www.website1.com?ticket=XXXX-OOOO-XXXX-OOOO,在本站驗(yàn)證通過之后,會再次重定向回業(yè)務(wù)首頁:www.website1.com。

之后用戶訪問website2  

① 用戶訪問website2,用戶在website2域并沒有認(rèn)證;跳轉(zhuǎn)回www.sso-website.com?service=https://www.website2.com

② SSO檢測到該用戶在SSO域下存在Cookie for sso,認(rèn)定該用戶已經(jīng)登陸,故跳轉(zhuǎn)回website2, 如上也會攜帶認(rèn)證ticket

③ 如上,website2收到website2.com?ticket=XXXX-OOOO-XXXX-OOOO請求,會做一次SSO驗(yàn)證;驗(yàn)證成功,寫入本站Cookie for website2

重點(diǎn)解讀

① SSO認(rèn)證成功,寫入的cookie for sso,是登陸到其他系統(tǒng)的關(guān)鍵

② website1收到SSO發(fā)起的重定向請求,解析出ticket=XXXX-OOOO-XXXX-OOOO,為什么還要做一次SSO驗(yàn)證?

因?yàn)閣ebsite1收到的帶ticket請求,有可能是偽造,所以在website1中需要去SSO驗(yàn)證一次。

③ 標(biāo)準(zhǔn)的CAS登陸流程有三次302客戶端重定向,分別由原站點(diǎn)website1啟動2次和SSO啟動一次

理論上流程由服務(wù)端重定向也是可以的?看官若發(fā)現(xiàn)有漏洞,可在評論區(qū)回復(fù)。 

④ 退出SSO登陸,要做兩件事情:

     - 向SSO發(fā)起api請求,請求SSO刪除用戶在SSO域下的認(rèn)證cookie for sso

     - 移除本站的cookie for website1

⑤ 每個website,至少需要如下sso配置 

"SsoOptions": {
    "BaseAddress": "https://sso-cas.sso.com",        // 基地址
    "LoginPath": "/login",                                         // sso登陸地址
    "LogoutPath": "/api/logout",                           // 退出sso登陸的api地址
    "ValidateTGTPath": "/api/validate",                // 驗(yàn)證ticket的api地址 
    "UserInfoPath": "/api/v2/userinfo"                 // 從sso拿到登陸用戶信息的api地址
  },

看完上述內(nèi)容,你們掌握SSO登錄原理是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

sso
AI