日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

谈谈SSO单点登录的设计实现

發(fā)布時(shí)間:2023/11/16 windows 80 coder
生活随笔 收集整理的這篇文章主要介紹了 谈谈SSO单点登录的设计实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

談?wù)凷SO單點(diǎn)登錄的設(shè)計(jì)實(shí)現(xiàn)

本篇將會講講單點(diǎn)登錄的具體實(shí)現(xiàn)。

實(shí)現(xiàn)思路

其實(shí)單點(diǎn)登錄在我們生活中很常見,比如學(xué)校的網(wǎng)站,有很多個(gè)系統(tǒng),迎新系統(tǒng),教務(wù)系統(tǒng),網(wǎng)課系統(tǒng)。我們往往只需要登錄一次就能在各個(gè)系統(tǒng)中被認(rèn)定為登錄狀態(tài)。

這是怎么實(shí)現(xiàn)的?我們需要一個(gè)認(rèn)證中心,一如學(xué)校網(wǎng)站也有一個(gè)統(tǒng)一認(rèn)證中心,也就是我們的SSO的Server端。在每個(gè)系統(tǒng)也就是Client端,我們只要判斷已經(jīng)在這個(gè)認(rèn)證中心中登錄,那我們就會被設(shè)置為登錄狀態(tài)。

再來就是最后一個(gè)問題了,我們判斷在認(rèn)證中心登錄后,怎么在其他系統(tǒng)中也登錄?

這個(gè)問題其實(shí)就是單點(diǎn)登錄中最麻煩的問題了,也就是如何傳播我們的登錄狀態(tài)。

我們可以分為兩個(gè)情況Cookie共享傳播狀態(tài),url參數(shù)傳播狀態(tài)。

Cookie共享傳播狀態(tài)

第一種情況:我們的認(rèn)證中心和其他系統(tǒng)是在一個(gè)域名下的,認(rèn)證中心為父域名(jwxt.com),其他系統(tǒng)是子域名(yx.jwxt.com),或者是同一IP不同端口的情況,我們的服務(wù)端通過cookie去判斷是否登錄。

在這種情況下我們只要在認(rèn)證中心登錄成功的時(shí)候設(shè)置Cookie,當(dāng)然設(shè)置Cookie的時(shí)候也要注意設(shè)置好你的Cookie參數(shù)。

要注意設(shè)置的參數(shù)是dominpath。這兩個(gè)參數(shù)值決定了Cookie的作用域。domin要設(shè)置為父域名(.jwxt.com)。當(dāng)然還要注意一個(gè)SameSite參數(shù),不能設(shè)置為None。(如果為None,你在baidu.com登錄,在example.com網(wǎng)站如果你點(diǎn)擊了 https://baidu.com/delete鏈接,會帶著你在baidu.com的Cookie訪問。)

設(shè)置完Cookie,子域名的系統(tǒng)也有了Cookie,自然就會被服務(wù)端判斷為登錄狀態(tài)。

簡而言之,就是利用Cookie共享來實(shí)現(xiàn)登錄狀態(tài)的傳播。

url參數(shù)傳播狀態(tài)

第二種我們的認(rèn)證中心和其他系統(tǒng)不在一個(gè)域名下的,或者是不同IP的情況。

為了安全瀏覽器限制cookie跨域,也就是說第一種方法就不管用了。

這種情況可以通過傳播參數(shù)來實(shí)現(xiàn),也就是在認(rèn)證中心登錄后帶著 登錄憑證(token) 重定向到對應(yīng)的Client頁面,然后我們的前端就可以用js獲取到url中的token進(jìn)行存儲(設(shè)置到Cookie或者localstorage等方式),之后我們的服務(wù)端只需要通過這個(gè)token就可以判斷為登錄狀態(tài)了。

當(dāng)然,為了安全我們往往不會直接傳遞憑證,而是傳遞一個(gè)校驗(yàn)碼ticket,然后前端發(fā)送ticket到服務(wù)端校驗(yàn)ticket,校驗(yàn)成功,就進(jìn)行登錄,設(shè)置Cookie或者存儲token。

流程

接下來我們梳理一下流程,一下Client為需要單點(diǎn)登錄的系統(tǒng),Server為統(tǒng)一認(rèn)證中心。

Cookie共享傳播狀態(tài)

  1. 用戶在Client1,如果沒有登錄,跳轉(zhuǎn)到Server,判斷在Server是否登錄,如果判斷沒有登錄,要求登錄,登錄成功后設(shè)置Cookie,跳轉(zhuǎn)Client
  2. Client1登錄成功

如果之后在Client2頁面,由于共享Cookie,當(dāng)然也是登錄狀態(tài)。

url參數(shù)傳播狀態(tài)

  1. 用戶在Client1,判斷沒有登錄,跳轉(zhuǎn)到Server,判斷在Server是否登錄,如果沒有登錄,要求登錄,登錄成功后設(shè)置Cookie,帶著ticket跳轉(zhuǎn)Client。
  2. 到了Client1,前端通過參數(shù)獲取到ticket,發(fā)送到服務(wù)端,服務(wù)端校驗(yàn)ticket獲取登錄id,設(shè)置Cookie進(jìn)行登錄。

之后在Client2頁面

  1. 用戶在Client2,判斷沒有登錄,跳轉(zhuǎn)到Server,判斷在Server是否登錄,這時(shí)候判斷為登錄,帶著ticket(或者token)跳轉(zhuǎn)Client。
  2. 到了Client2,前端通過參數(shù)獲取到ticket,發(fā)送到服務(wù)端,服務(wù)端校驗(yàn)ticket獲取登錄id,設(shè)置Cookie進(jìn)行登錄。

如果不使用ticket校驗(yàn)就直接存儲傳播過來的登錄憑證即可,當(dāng)然如果你不存儲到Cookie,記得在請求后端服務(wù)的時(shí)候帶上token。

ticket校驗(yàn)

再說說ticket校驗(yàn)

ticket校驗(yàn)根據(jù)情況也可以分為兩種,一種情況是Server和Client的后端共用的同一個(gè)Redis或者Redis集群,可以直接向Redis請求校驗(yàn)。如果后端用的Redis不同,可以發(fā)送http請求到Server端在Server端校驗(yàn)。

到此,單點(diǎn)登錄就完成了。

當(dāng)然在以上描述中的Cookie你也可以不使用,使用Cookie主要是方便,在請求后端時(shí)會自動發(fā)送。你只需要存儲到localstorage/sessionstorage等地方,請求后端的時(shí)候記得get然后帶上即可。

總結(jié)

以上是生活随笔為你收集整理的谈谈SSO单点登录的设计实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。