您好,登錄后才能下訂單哦!
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ù)
今天我們主要講不同頂域下SSO的實(shí)現(xiàn),引出CAS原理,CAS官方:
https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol.html
手繪原理
下圖描述了傳統(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)用程序的訪問
① 用戶訪問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域并沒有認(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è)資訊頻道,感謝各位的閱讀!
免責(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)容。