哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

掃碼添加小助手

加入工程師交流群

前言

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

實現(xiàn)方式二:認證中心

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

補充:域名分級

前言

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

在這樣的場景下,使用 Cookie 無疑是最方便的,因此我們一般都會將 Session 的 ID 或 Token 保存到 Cookie 中,當服務端收到請求后,通過驗證 Cookie 中的信息來判斷用戶是否登錄 。

單點登錄(Single Sign On, SSO)是指在同一帳號平臺下的多個應用系統(tǒng)中,用戶只需登錄一次,即可訪問所有相互信任的應用系統(tǒng)。

舉例來說,百度貼吧和百度地圖是百度公司旗下的兩個不同的應用系統(tǒng),如果用戶在百度貼吧登錄過之后,當他訪問百度地圖時無需再次登錄,那么就說明百度貼吧和百度地圖之間實現(xiàn)了單點登錄。

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

當然僅此是不夠的,因為不同的應用系統(tǒng)有著不同的域名,盡管 Session 共享了,但是由于 Session ID 是往往保存在瀏覽器 Cookie 中的,因此存在作用域的限制,無法跨域名傳遞,也就是說當用戶在 app1.com 中登錄后,Session ID 僅在瀏覽器訪問 app1.com 時才會自動在請求頭中攜帶,而當瀏覽器訪問 app2.com 時,Session ID 是不會被帶過去的。實現(xiàn)單點登錄的關鍵在于,如何讓 Session ID(或 Token)在多個域中共享。

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

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

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

如果將 Cookie 的 domain 屬性設置為當前域的父域,那么就認為它是父域 Cookie。Cookie 有一個特點,即父域中的 Cookie 被子域所共享,換言之,子域會自動繼承父域中的Cookie。

利用 Cookie 的這個特點,不難想到,將 Session ID(或 Token)保存到父域中不就行了。沒錯,我們只需要將 Cookie 的 domain 屬性設置為父域的域名(主域名),同時將 Cookie 的 path 屬性設置為根路徑,這樣所有的子域應用就都可以訪問到這個 Cookie 了。

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

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

實現(xiàn)方式二:認證中心

我們可以部署一個認證中心,認證中心就是一個專門負責處理登錄請求的獨立的 Web 服務。

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

應用系統(tǒng)檢查當前請求有沒有 Token,如果沒有,說明用戶在當前系統(tǒng)中尚未登錄,那么就將頁面跳轉至認證中心。由于這個操作會將認證中心的 Cookie 自動帶過去,因此,認證中心能夠根據(jù) Cookie 知道用戶是否已經(jīng)登錄過了。

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

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

這里順便介紹兩款認證中心的開源實現(xiàn):

Apereo CAS 是一個企業(yè)級單點登錄系統(tǒng),其中 CAS 的意思是”Central Authentication Service“。它最初是耶魯大學實驗室的項目,后來轉讓給了 JASIG 組織,項目更名為 JASIG CAS,后來該組織并入了Apereo 基金會,項目也隨之更名為 Apereo CAS。

XXL-SSO 是一個簡易的單點登錄系統(tǒng),由大眾點評工程師許雪里個人開發(fā),代碼比較簡單,沒有做安全控制,因而不推薦直接應用在項目中,這里列出來僅供參考。

總結:此種實現(xiàn)方式相對復雜,支持跨域,擴展性好,是單點登錄的標準做法。

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

前面,我們說實現(xiàn)單點登錄的關鍵在于,如何讓 Session ID(或 Token)在多個域中共享。

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

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

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

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

關鍵代碼如下:

pIYBAGAY6qSAOlmYAACeeFqnF0Q316.jpg

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

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

補充:域名分級

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

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

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

責任編輯:xj

原文標題:單點登錄的三種實現(xiàn)方式

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

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

    關注

    0

    文章

    78

    瀏覽量

    11690
  • Cookie
    +關注

    關注

    0

    文章

    30

    瀏覽量

    10771

原文標題:單點登錄的三種實現(xiàn)方式

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    如何自動登錄TestStand2.0

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

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

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

    單點激光雷達模組的微型化發(fā)展

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

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

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

    路由器TACACS+賬號登錄時經(jīng)常報用戶密碼錯誤的問題分析

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

    PCB設計中單點接地與多點接地的區(qū)別與設計要點

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

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

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

    如何自動登錄TestStand

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

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

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

    單點失效保護的15W電源管理方案

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

    HarmonyOS5云服務技術分享--賬號登錄文章整理

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

    HarmonyOS5云服務技術分享--登錄郵件功能整理

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

    HarmonyOS5云服務技術分享--手機號登錄教程

    auth.settings.enableMultiDevice(true)開啟支持 六、擴展能力 ? 想讓你的認證系統(tǒng)更強大? 試試這些: ? ??賬號關聯(lián)??:綁定微信/郵箱實現(xiàn)方式登錄 ? ??云函數(shù)觸發(fā)
    發(fā)表于 05-22 15:37

    復合機器人為什么要使用單點糾偏算法?

    復合機器人單點糾偏算法
    的頭像 發(fā)表于 04-20 14:59 ?843次閱讀
    復合機器人為什么要使用<b class='flag-5'>單點</b>糾偏算法?
    长乐市| 益阳市| 岳阳市| 利辛县| 赤城县| 景泰县| 东源县| 吉安市| 平山县| 普格县| 修武县| 科技| 英吉沙县| 屏东市| 桃源县| 阿坝| 南华县| 井冈山市| 托克托县| 威远县| 茌平县| 两当县| 孝昌县| 读书| 老河口市| 长治市| 玉林市| 浑源县| 阳谷县| 镇原县| 鄂尔多斯市| 日喀则市| 高邮市| 巫溪县| 乐东| 清流县| 县级市| 健康| 桦川县| 罗山县| 仁怀市|