日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單點(diǎn)登錄的實(shí)現(xiàn)方式有哪些

Linux愛(ài)好者 ? 來(lái)源:Linux愛(ài)好者 ? 作者:張永恒 ? 2021-02-02 14:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

實(shí)現(xiàn)方式一:父域 Cookie

實(shí)現(xiàn)方式二:認(rèn)證中心

實(shí)現(xiàn)方式三:LocalStorage 跨域

補(bǔ)充:域名分級(jí)

前言

在 B/S 系統(tǒng)中,登錄功能通常都是基于 Cookie 來(lái)實(shí)現(xiàn)的。當(dāng)用戶登錄成功后,一般會(huì)將登錄狀態(tài)記錄到 Session 中,或者是給用戶簽發(fā)一個(gè) Token,無(wú)論哪一種方式,都需要在客戶端保存一些信息(Session ID 或 Token ),并要求客戶端在之后的每次請(qǐng)求中攜帶它們。

在這樣的場(chǎng)景下,使用 Cookie 無(wú)疑是最方便的,因此我們一般都會(huì)將 Session 的 ID 或 Token 保存到 Cookie 中,當(dāng)服務(wù)端收到請(qǐng)求后,通過(guò)驗(yàn)證 Cookie 中的信息來(lái)判斷用戶是否登錄 。

單點(diǎn)登錄(Single Sign On, SSO)是指在同一帳號(hào)平臺(tái)下的多個(gè)應(yīng)用系統(tǒng)中,用戶只需登錄一次,即可訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。

舉例來(lái)說(shuō),百度貼吧和百度地圖是百度公司旗下的兩個(gè)不同的應(yīng)用系統(tǒng),如果用戶在百度貼吧登錄過(guò)之后,當(dāng)他訪問(wèn)百度地圖時(shí)無(wú)需再次登錄,那么就說(shuō)明百度貼吧和百度地圖之間實(shí)現(xiàn)了單點(diǎn)登錄。

單點(diǎn)登錄的本質(zhì)就是在多個(gè)應(yīng)用系統(tǒng)中共享登錄狀態(tài)。如果用戶的登錄狀態(tài)是記錄在 Session 中的,要實(shí)現(xiàn)共享登錄狀態(tài),就要先共享 Session,比如可以將 Session 序列化到 Redis 中,讓多個(gè)應(yīng)用系統(tǒng)共享同一個(gè) Redis,直接讀取 Redis 來(lái)獲取 Session。

當(dāng)然僅此是不夠的,因?yàn)椴煌膽?yīng)用系統(tǒng)有著不同的域名,盡管 Session 共享了,但是由于 Session ID 是往往保存在瀏覽器 Cookie 中的,因此存在作用域的限制,無(wú)法跨域名傳遞,也就是說(shuō)當(dāng)用戶在 app1.com 中登錄后,Session ID 僅在瀏覽器訪問(wèn) app1.com 時(shí)才會(huì)自動(dòng)在請(qǐng)求頭中攜帶,而當(dāng)瀏覽器訪問(wèn) app2.com 時(shí),Session ID 是不會(huì)被帶過(guò)去的。實(shí)現(xiàn)單點(diǎn)登錄的關(guān)鍵在于,如何讓 Session ID(或 Token)在多個(gè)域中共享。

實(shí)現(xiàn)方式一:父域 Cookie

在將具體實(shí)現(xiàn)之前,我們先來(lái)聊一聊 Cookie 的作用域。

Cookie 的作用域由 domain 屬性和 path 屬性共同決定。domain 屬性的有效值為當(dāng)前域或其父域的域名/IP地址,在 Tomcat 中,domain 屬性默認(rèn)為當(dāng)前域的域名/IP地址。path 屬性的有效值是以“/”開(kāi)頭的路徑,在 Tomcat 中,path 屬性默認(rèn)為當(dāng)前 Web 應(yīng)用的上下文路徑。

如果將 Cookie 的 domain 屬性設(shè)置為當(dāng)前域的父域,那么就認(rèn)為它是父域 Cookie。Cookie 有一個(gè)特點(diǎn),即父域中的 Cookie 被子域所共享,換言之,子域會(huì)自動(dòng)繼承父域中的Cookie。

利用 Cookie 的這個(gè)特點(diǎn),不難想到,將 Session ID(或 Token)保存到父域中不就行了。沒(méi)錯(cuò),我們只需要將 Cookie 的 domain 屬性設(shè)置為父域的域名(主域名),同時(shí)將 Cookie 的 path 屬性設(shè)置為根路徑,這樣所有的子域應(yīng)用就都可以訪問(wèn)到這個(gè) Cookie 了。

不過(guò)這要求應(yīng)用系統(tǒng)的域名需建立在一個(gè)共同的主域名之下,如 tieba.baidu.com 和 map.baidu.com,它們都建立在 baidu.com 這個(gè)主域名之下,那么它們就可以通過(guò)這種方式來(lái)實(shí)現(xiàn)單點(diǎn)登錄。

總結(jié):此種實(shí)現(xiàn)方式比較簡(jiǎn)單,但不支持跨主域名。

實(shí)現(xiàn)方式二:認(rèn)證中心

我們可以部署一個(gè)認(rèn)證中心,認(rèn)證中心就是一個(gè)專門(mén)負(fù)責(zé)處理登錄請(qǐng)求的獨(dú)立的 Web 服務(wù)。

用戶統(tǒng)一在認(rèn)證中心進(jìn)行登錄,登錄成功后,認(rèn)證中心記錄用戶的登錄狀態(tài),并將 Token 寫(xiě)入 Cookie。(注意這個(gè) Cookie 是認(rèn)證中心的,應(yīng)用系統(tǒng)是訪問(wèn)不到的。)

應(yīng)用系統(tǒng)檢查當(dāng)前請(qǐng)求有沒(méi)有 Token,如果沒(méi)有,說(shuō)明用戶在當(dāng)前系統(tǒng)中尚未登錄,那么就將頁(yè)面跳轉(zhuǎn)至認(rèn)證中心。由于這個(gè)操作會(huì)將認(rèn)證中心的 Cookie 自動(dòng)帶過(guò)去,因此,認(rèn)證中心能夠根據(jù) Cookie 知道用戶是否已經(jīng)登錄過(guò)了。

如果認(rèn)證中心發(fā)現(xiàn)用戶尚未登錄,則返回登錄頁(yè)面,等待用戶登錄,如果發(fā)現(xiàn)用戶已經(jīng)登錄過(guò)了,就不會(huì)讓用戶再次登錄了,而是會(huì)跳轉(zhuǎn)回目標(biāo) URL ,并在跳轉(zhuǎn)前生成一個(gè) Token,拼接在目標(biāo) URL 的后面,回傳給目標(biāo)應(yīng)用系統(tǒng)。

應(yīng)用系統(tǒng)拿到 Token 之后,還需要向認(rèn)證中心確認(rèn)下 Token 的合法性,防止用戶偽造。確認(rèn)無(wú)誤后,應(yīng)用系統(tǒng)記錄用戶的登錄狀態(tài),并將 Token 寫(xiě)入 Cookie,然后給本次訪問(wèn)放行。(注意這個(gè) Cookie 是當(dāng)前應(yīng)用系統(tǒng)的,其他應(yīng)用系統(tǒng)是訪問(wèn)不到的。)當(dāng)用戶再次訪問(wèn)當(dāng)前應(yīng)用系統(tǒng)時(shí),就會(huì)自動(dòng)帶上這個(gè) Token,應(yīng)用系統(tǒng)驗(yàn)證 Token 發(fā)現(xiàn)用戶已登錄,于是就不會(huì)有認(rèn)證中心什么事了。

這里順便介紹兩款認(rèn)證中心的開(kāi)源實(shí)現(xiàn):

Apereo CAS 是一個(gè)企業(yè)級(jí)單點(diǎn)登錄系統(tǒng),其中 CAS 的意思是”Central Authentication Service“。它最初是耶魯大學(xué)實(shí)驗(yàn)室的項(xiàng)目,后來(lái)轉(zhuǎn)讓給了 JASIG 組織,項(xiàng)目更名為 JASIG CAS,后來(lái)該組織并入了Apereo 基金會(huì),項(xiàng)目也隨之更名為 Apereo CAS。

XXL-SSO 是一個(gè)簡(jiǎn)易的單點(diǎn)登錄系統(tǒng),由大眾點(diǎn)評(píng)工程師許雪里個(gè)人開(kāi)發(fā),代碼比較簡(jiǎn)單,沒(méi)有做安全控制,因而不推薦直接應(yīng)用在項(xiàng)目中,這里列出來(lái)僅供參考。

總結(jié):此種實(shí)現(xiàn)方式相對(duì)復(fù)雜,支持跨域,擴(kuò)展性好,是單點(diǎn)登錄的標(biāo)準(zhǔn)做法。

實(shí)現(xiàn)方式三:LocalStorage 跨域

前面,我們說(shuō)實(shí)現(xiàn)單點(diǎn)登錄的關(guān)鍵在于,如何讓 Session ID(或 Token)在多個(gè)域中共享。

父域 Cookie 確實(shí)是一種不錯(cuò)的解決方案,但是不支持跨域。那么有沒(méi)有什么奇淫技巧能夠讓 Cookie 跨域傳遞呢?

很遺憾,瀏覽器對(duì) Cookie 的跨域限制越來(lái)越嚴(yán)格。Chrome 瀏覽器還給 Cookie 新增了一個(gè) SameSite 屬性,此舉幾乎禁止了一切跨域請(qǐng)求的 Cookie 傳遞(超鏈接除外),并且只有當(dāng)使用 HTTPs 協(xié)議時(shí),才有可能被允許在 AJAX 跨域請(qǐng)求中接受服務(wù)器傳來(lái)的 Cookie。

不過(guò),在前后端分離的情況下,完全可以不使用 Cookie,我們可以選擇將 Session ID (或 Token )保存到瀏覽器的 LocalStorage 中,讓前端在每次向后端發(fā)送請(qǐng)求時(shí),主動(dòng)將 LocalStorage 的數(shù)據(jù)傳遞給服務(wù)端。這些都是由前端來(lái)控制的,后端需要做的僅僅是在用戶登錄成功后,將 Session ID (或 Token )放在響應(yīng)體中傳遞給前端。

在這樣的場(chǎng)景下,單點(diǎn)登錄完全可以在前端實(shí)現(xiàn)。前端拿到 Session ID (或 Token )后,除了將它寫(xiě)入自己的 LocalStorage 中之外,還可以通過(guò)特殊手段將它寫(xiě)入多個(gè)其他域下的 LocalStorage 中。

關(guān)鍵代碼如下:

pIYBAGAY6qSAOlmYAACeeFqnF0Q316.jpg

前端通過(guò) iframe+postMessage() 方式,將同一份 Token 寫(xiě)入到了多個(gè)域下的 LocalStorage 中,前端每次在向后端發(fā)送請(qǐng)求之前,都會(huì)主動(dòng)從 LocalStorage 中讀取 Token 并在請(qǐng)求中攜帶,這樣就實(shí)現(xiàn)了同一份 Token 被多個(gè)域所共享。

總結(jié):此種實(shí)現(xiàn)方式完全由前端控制,幾乎不需要后端參與,同樣支持跨域。

補(bǔ)充:域名分級(jí)

從專業(yè)的角度來(lái)說(shuō)(根據(jù)《計(jì)算機(jī)網(wǎng)絡(luò)》中的定義),.com、.cn 為一級(jí)域名(也稱頂級(jí)域名),.com.cn、baidu.com 為二級(jí)域名,sina.com.cn、tieba.baidu.com 為三級(jí)域名,以此類推,N 級(jí)域名就是 N-1 級(jí)域名的直接子域名。

從使用者的角度來(lái)說(shuō),一般把可支持獨(dú)立備案的主域名稱作一級(jí)域名,如 baidu.com、sina.com.cn 皆可稱作一級(jí)域名,在主域名下建立的直接子域名稱作二級(jí)域名,如 tieba.baidu.com 為二級(jí)域名。

為了避免歧義,本人將使用“主域名“替代”一級(jí)域名“的說(shuō)法。

責(zé)任編輯:xj

原文標(biāo)題:?jiǎn)吸c(diǎn)登錄的三種實(shí)現(xiàn)方式

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 域名
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    11691
  • Cookie
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10774

原文標(biāo)題:?jiǎn)吸c(diǎn)登錄的三種實(shí)現(xiàn)方式

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ChatGPT突然無(wú)法登錄是什么情況?如何解決?

    直接影響工作效率。那么到底是怎么回事?又該如何解決? 一、ChatGPT突然無(wú)法登錄哪些原因? 根據(jù) OpenAI 官方幫助文檔以及實(shí)際經(jīng)驗(yàn),常見(jiàn)原因主要集中在以下幾類: 1、賬號(hào)或密碼問(wèn)題 密碼輸入錯(cuò)誤 賬號(hào)被鎖定 多次登錄
    的頭像 發(fā)表于 04-13 12:34 ?2442次閱讀
    ChatGPT突然無(wú)法<b class='flag-5'>登錄</b>是什么情況?如何解決?

    如何自動(dòng)登錄TestStand2.0

    啟動(dòng)TestStand時(shí)彈出的登錄界面,除了上次介紹的修改Configure,還可以通過(guò)登錄管理員賬號(hào)進(jìn)行修改。
    的頭像 發(fā)表于 03-20 15:30 ?207次閱讀
    如何自動(dòng)<b class='flag-5'>登錄</b>TestStand2.0

    SSH安全加固與免密登錄實(shí)戰(zhàn)指南

    線上服務(wù)器被暴力破解SSH密碼的事每個(gè)月都在發(fā)生。我們團(tuán)隊(duì)去年處理過(guò)一起安全事件,一臺(tái)測(cè)試機(jī)用了默認(rèn)22端口加弱密碼,48小時(shí)內(nèi)被植入挖礦程序,CPU跑滿導(dǎo)致同網(wǎng)段業(yè)務(wù)受影響。事后復(fù)盤(pán)發(fā)現(xiàn) /var/log/secure 里超過(guò)20萬(wàn)次失敗登錄記錄,全是字典攻擊。
    的頭像 發(fā)表于 02-09 15:17 ?2000次閱讀

    單點(diǎn)激光雷達(dá)模組的微型化發(fā)展

    單點(diǎn)激光雷達(dá)模組的微型化正通過(guò)芯片化集成、先進(jìn)封裝、感算一體化三大核心路徑快速推進(jìn),實(shí)現(xiàn)了體積從厘米級(jí)向毫米級(jí)跨越、重量降至10g以下、功耗低于0.5W的突破,已廣泛應(yīng)用于機(jī)器人、無(wú)人機(jī)、消費(fèi)電子等領(lǐng)域。
    的頭像 發(fā)表于 01-13 14:40 ?810次閱讀
    <b class='flag-5'>單點(diǎn)</b>激光雷達(dá)模組的微型化發(fā)展

    信號(hào)調(diào)理設(shè)備的接地方式哪些?

    信號(hào)調(diào)理設(shè)備的接地方式核心圍繞 “抗干擾、防地環(huán)路、穩(wěn)電位” 設(shè)計(jì),主要分為 單點(diǎn)接地、浮地、屏蔽層接地、混合接地、多級(jí)接地 五類,不同方式適配不同場(chǎng)景(干擾強(qiáng)度、布線距離、信號(hào)類型),具體如下
    的頭像 發(fā)表于 11-14 16:18 ?4000次閱讀
    信號(hào)調(diào)理設(shè)備的接地<b class='flag-5'>方式</b><b class='flag-5'>有</b>哪些?

    路由器TACACS+賬號(hào)登錄時(shí)經(jīng)常報(bào)用戶密碼錯(cuò)誤的問(wèn)題分析

    某地M6000-S開(kāi)啟TACACS+賬號(hào)登錄認(rèn)證后,發(fā)現(xiàn)設(shè)備登錄經(jīng)常會(huì)上報(bào)用戶密碼錯(cuò)誤,過(guò)一段時(shí)間才恢復(fù)正常。
    的頭像 發(fā)表于 11-14 09:55 ?547次閱讀
    路由器TACACS+賬號(hào)<b class='flag-5'>登錄</b>時(shí)經(jīng)常報(bào)用戶密碼錯(cuò)誤的問(wèn)題分析

    PCB設(shè)計(jì)中單點(diǎn)接地與多點(diǎn)接地的區(qū)別與設(shè)計(jì)要點(diǎn)

    一站式PCBA加工廠家今天為大家講講PCB設(shè)計(jì)中的單點(diǎn)接地與多點(diǎn)接地什么區(qū)別?單點(diǎn)接地與多點(diǎn)接地區(qū)別與設(shè)計(jì)要點(diǎn)。在PCB設(shè)計(jì)中,接地系統(tǒng)的設(shè)計(jì)是影響電路性能的關(guān)鍵因素之一。單點(diǎn)接地和
    的頭像 發(fā)表于 10-10 09:10 ?2790次閱讀
    PCB設(shè)計(jì)中<b class='flag-5'>單點(diǎn)</b>接地與多點(diǎn)接地的區(qū)別與設(shè)計(jì)要點(diǎn)

    科普 | 5G公網(wǎng)對(duì)講幾種實(shí)現(xiàn)方式?

    對(duì)講機(jī)的通信方式,通過(guò)PTT按鍵,實(shí)現(xiàn)一鍵對(duì)講的通信方式,應(yīng)用在一些關(guān)鍵業(yè)務(wù)通信,應(yīng)急通信,行業(yè)工作環(huán)境下的通信需求。要實(shí)現(xiàn)5G公網(wǎng)對(duì)講現(xiàn)在有兩種
    的頭像 發(fā)表于 09-03 14:14 ?1349次閱讀
    科普 | 5G公網(wǎng)對(duì)講<b class='flag-5'>有</b>幾種<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方式</b>?

    如何自動(dòng)登錄TestStand

    啟動(dòng)TestStand時(shí)彈出的登錄界面,在日常使用中并無(wú)大礙,但當(dāng)項(xiàng)目需要通過(guò)LabVIEW調(diào)用TestStand序列文件時(shí),這個(gè)環(huán)節(jié)就會(huì)破壞程序運(yùn)行的流暢性。
    的頭像 發(fā)表于 08-28 10:43 ?1373次閱讀
    如何自動(dòng)<b class='flag-5'>登錄</b>TestStand

    stm32cubeide官網(wǎng)賬號(hào)登錄一直顯示登錄失敗是怎么回事?

    stm32cubeide官網(wǎng)下載軟件需要登錄賬號(hào),今天突然登錄不了,且不能找回密碼。
    發(fā)表于 07-23 07:52

    單點(diǎn)失效保護(hù)的15W電源管理方案

    芯片單點(diǎn)失效保護(hù)是一種關(guān)鍵的安全設(shè)計(jì)機(jī)制,旨在確保當(dāng)芯片的某一組件發(fā)生故障時(shí),系統(tǒng)不會(huì)完全崩潰或引發(fā)連鎖性失效,而是進(jìn)入預(yù)設(shè)的安全狀態(tài)。今天推薦的15W電源管理方案,主控芯片就自帶單點(diǎn)失效保護(hù)功能。接下來(lái),一起走進(jìn)U6218C+U7712電源方案組合!
    的頭像 發(fā)表于 07-08 13:44 ?1075次閱讀
    帶<b class='flag-5'>單點(diǎn)</b>失效保護(hù)的15W電源管理方案

    TCP攻擊是什么?什么防護(hù)方式

    出DDoS高防產(chǎn)品、CC防御產(chǎn)品,但是對(duì)于TCP攻擊的防護(hù)不是特別的理想。那么, TCP攻擊是什么?什么防護(hù)方式? TCP攻擊是什么? TCP攻擊是指利用TCP協(xié)議中的漏洞或者缺陷對(duì)網(wǎng)絡(luò)進(jìn)行攻擊的行為。這種攻擊方式可以導(dǎo)致網(wǎng)絡(luò)
    的頭像 發(fā)表于 06-12 17:33 ?1222次閱讀

    HarmonyOS5云服務(wù)技術(shù)分享--賬號(hào)登錄文章整理

    嘿,各位開(kāi)發(fā)者朋友!今天咱們來(lái)聊一聊鴻蒙生態(tài)中備受關(guān)注的ArkTS(API 12),尤其是如何用它快速實(shí)現(xiàn)華為賬號(hào)登錄功能。不管你是剛接觸HarmonyOS的新手,還是想升級(jí)現(xiàn)有項(xiàng)目的技術(shù)咖
    發(fā)表于 05-22 16:16

    HarmonyOS5云服務(wù)技術(shù)分享--登錄郵件功能整理

    服務(wù)中的??郵箱登錄認(rèn)證??功能,基于ArkTS API 12實(shí)現(xiàn)。無(wú)論你是剛接觸HarmonyOS生態(tài),還是想優(yōu)化現(xiàn)有登錄流程,這篇文章都將用清晰的代碼示例和通俗的講解,帶你搞定郵箱認(rèn)證的完整
    發(fā)表于 05-22 16:04

    HarmonyOS5云服務(wù)技術(shù)分享--手機(jī)號(hào)登錄教程

    auth.settings.enableMultiDevice(true)開(kāi)啟支持 六、擴(kuò)展能力 ? 想讓你的認(rèn)證系統(tǒng)更強(qiáng)大? 試試這些: ? ??賬號(hào)關(guān)聯(lián)??:綁定微信/郵箱實(shí)現(xiàn)方式登錄 ? ??云函數(shù)觸發(fā)
    發(fā)表于 05-22 15:37
    乐清市| 新田县| 株洲市| 黎川县| 龙南县| 芷江| 米脂县| 灌阳县| 贡嘎县| 驻马店市| 青田县| 广宗县| 昌宁县| 铁岭市| 台江县| 噶尔县| 平陆县| 平定县| 巫溪县| 琼中| 乌兰浩特市| 武清区| 嫩江县| 黄山市| 伊川县| 龙川县| 会泽县| 曲水县| 绥江县| 黎平县| 富顺县| 云浮市| 龙海市| 越西县| 上蔡县| 磐石市| 正宁县| 虹口区| 黑山县| 黑水县| 乌拉特前旗|