單點登錄之如何平衡 Token 安全性和用戶體驗?

2020-12-16 玉符科技

Token作為用戶獲取受保護資源的憑證,必須設置一個過期時間,否則一次登錄便可永久使用,認證功能就失去了意義。但是矛盾在於:過期時間設置得太長,用戶數據的安全性將大打折扣;過期時間設置得太短,用戶就必須每隔一段時間重新登錄,以獲取新的憑證,這會極大挫傷用戶的積極性。針對這一問題,我們可以利用Access / Refresh Token這一概念來平衡Token安全性和用戶體驗。

Access / Refresh Token是什麼?

圖 1

上圖表示Access/Refresh Token在客戶端、認證伺服器、資源伺服器三者之間的傳遞關係,簡單來說:

Access Token即「訪問令牌」,是客戶端向資源伺服器換取資源的憑證;Refresh Token即「刷新令牌」,是客戶端向認證伺服器換取Access Token的憑證。Access / Refresh Token如何使用?

圖 2

上圖表示客戶端請求資源的過程中,Access Token 和 Refresh Token 是如何配合使用的:

1. 用戶提供身份信息(一般是用戶名密碼),利用客戶端向認證伺服器換取 Refresh Token和Access Token;

2. 客戶端攜帶Access Token訪問資源伺服器,資源伺服器識別Access Token並返回資源;

3. 當Access Token過期或失效,客戶端再一次訪問資源伺服器,資源伺服器返回「無效token」報錯

4. 客戶端通過Refresh Token向認證伺服器換取Access Token,認證伺服器返回新的Access Token。

用一個現實生活中的比喻來解釋 Access/Refresh Token 的使用過程:

假設我在網上預定了一家酒店。如果要入住這家酒店,我必須出示身份證和訂單。酒店前臺會登記相關證件和訂單信息,確認無誤後會給我一張票據和一張房卡(票據記錄我需要入住多少天,而房卡則讓我有當天的入住權)。以上場景中,「身份證和訂單」是我的用戶名密碼,「票據/房卡」是Refresh/Access Token,「前臺」是認證伺服器,「房間」是資源伺服器。

在整個入住過程中,「身份證和訂單」只在前臺使用一次;實際能進入房間的是「房卡」,但是房卡只有一天的有效期;如果房卡過期,我需要憑「票據」去前臺刷新「房卡」,獲取第二天的入住權。

將Token拆分成兩個,就是為了解決安全性和用戶體驗方面的矛盾——

Access Token使用頻繁,且與用戶數據直接關聯,安全性方面比較敏感,因此有效期設置得較短,即使Access Token洩漏也將很快失效。利用過期時間較短這個特性,也可以及時更新用戶的訪問權限(比如管理員縮小了的某員工訪問公司數據的權限,當Token過期後換取的新Access Token將立馬縮小其訪問數據的權限)而 Refresh Token僅用於獲取新的Access Token,使用頻率較低,不與用戶數據直接關聯,過期時間允許設置得長一些這樣就解決了用戶反覆登錄的問題。它們在落地實踐上有什麼具體的用處?

站在系統管理員的角度,我們很容易想到去管理用戶的會話行為。一般來說,可以通過設置Token過期時間、設置結束會話的行為、手動結束用戶會話這三種方式來管理用戶會話。目前玉符IDaaS在Token標準應用的基礎上,為管理員開放了自定義會話管理的功能,在提升系統管理員的運維體驗上更進一步——讓管理員真正「有能力管理」系統發放出去的Token,比如:會話過期時間設置(如圖3):

圖 3

結束會話行為設置(如圖4)

圖 4

手動結束用戶會話(如圖 5):

圖 5

小結

綜上所述,通過 Access Token 和 Refresh Token 配套使用,我們得以很好的平衡 Token 時效性(安全性)與用戶體驗二者之間的關係,並利用 Refresh Token 的特點讓 IT 系統管理員真正有能力管理系統發放出去的Token,並實現「點對點」的結束會話操作。

以上回答來自我司研發工程師小龍馬。

IDaaS(Identity as a Service)即身份認證管理雲平臺,它能提供多種標準化功能幫助用戶實現高效、安全的身份認證管理服務,如單點登錄、智能多因素認證、帳號生命周期管理等等。由於 IDaaS 在國內尚屬於新興產品形態,很多人對它只有模糊的印象,所以我們計劃用一系列文章,深入淺出介紹 IDaaS 相關的技術原理和細節。本文是「IDaaS 技術解析系列」文章的第 2 篇。後續我們將繼續分享更多技術思考,歡迎關注本公眾號並留言交流。搜索「玉符科技」了解更多。

相關焦點

  • 實戰|單點登錄系統原理與實現(全套流程圖+源碼)
    整編:微信公眾號,搜雲庫技術團隊,ID:souyunku因此,我們需要一種全新的登錄方式來實現多系統應用群的登錄,這就是單點登錄。三、單點登錄什麼是單點登錄?單點登錄全稱Single Sign On(以下簡稱SSO),是指在多系統應用群中登錄一個系統,便可在其他所有系統中得到授權而無需再次登錄,包括單點登錄與單點註銷兩部分。1、登錄相比於單系統登錄,sso需要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其他系統不提供登錄入口,只接受認證中心的間接授權。
  • Springboot之登錄模塊探索(含Token,驗證碼,網絡安全等知識)
    可是我想多了,於是有了以下幾個問題(裡面還包含網絡安全問題):1.登錄時的驗證碼2.自動登錄的實現3.怎麼維護前後端登錄狀態在這和大家分享下我實現此功能的過程,包括一些技術和心得1.登錄時的驗證碼>為什麼要驗證碼,原因很簡單,防止腳本無限次重複登錄,來暴力破解用戶密碼或者攻擊伺服器驗證碼的出現,使得每次登錄都有個動態變量需要輸入,無法用腳本寫死代碼具體可以參考:滑動驗證碼的設計和理解2.自動登錄的實現所謂自動登錄,指的是當用戶登錄網站時勾選了自動登錄,那麼下次再訪問網站就不需要輸入帳號密碼直接登錄了
  • 小程序自定義登錄態維護
    那麼小程序服務端開發的登錄態維護大家是如何做的呢?本文適用微信和QQ小程序的自定義登錄態維護。官方登錄態原理說明以微信為例,我們先來看看官方對小程序登錄態流程的處理說明。小程序可以通過微信官方提供的登陸能力方便地獲取微信提供的用戶身份標誌,快速建立小程序內的用戶體系。
  • 看看Laravel (Lumen) 是如何解決JWT-Auth刷新token問題的
    token如何刷新在PHP框架Laravel中安裝了擴展JWT-Auth,你可能會遇到一個問題,即token該如何刷新。可能很多人都不太理解作者的設計思想,包括我在內,但是看了很多issue之後,你就會慢慢的明白jwt-refresh是如何使用的咯,下面來給大家講解一下。首先create一個路由,比如「auth/refresh-token」 ,你可以指向某個方法,也可以直接寫個匿名函數。這裡個人是簡單的寫在匿名函數裡。
  • 解析新第三方登錄方式——蘋果登錄「Sign in with Apple」
    現在,蘋果的APP都需要在第三方登錄這裡接入「 Apple 登錄」(Sign in with Apple),這篇文章給大家解析說明下蘋果登錄是什麼,以及如何實現和設計的問題,接下來帶大家一起來看看,希望能給產品和設計的朋友提供參考。
  • 什麼是本機號碼一鍵登錄?APP本機號碼一鍵登錄如何實現?
    三大運營商推出一鍵登錄的服務後,由於其便捷性和安全性都好於傳統簡訊驗證碼,越來越多的APP註冊登錄環節都在使用本機號碼一鍵登錄驗證方式。本文主要介紹了本機號碼一鍵登錄特點以及實現方法。一、什麼是本機號碼一鍵登錄?
  • PHP中如何驗證用戶登錄
    PHP在編寫app小程序的時候,有時候我們需要驗證用戶的登錄狀態才能進行相應的操作,而用戶登錄狀態是如何驗證的呢,今天我們就一起來看一下相關的內容。登錄用戶在app中要驗證用戶登錄態,我們首先定義一個公有的public變量$user,並定義一個藉口用於代碼的預操作以及在進行操作前的處理,最終調用父類驗證用戶登錄的信息是否正確,以確認是否通過用戶驗證。
  • 九號平衡車Nano體驗:專為兒童用戶打造智能語音體感代步車
    那么九號平衡車Nano A75P實際表現究竟如何呢?通過科技犬的體驗來快速了解吧。騎乘體驗:教學模式快速引導小朋友快速掌握騎行方法正式騎乘之前出於安全性考慮,激活車輛後,在APP中進入新手教學模式,生動的動畫演示、循序漸進的語音教學將引導孩子如何騎行,更容易讓孩子明白騎行中的小竅門,降低孩子的學習難度。
  • 30 分鐘學會如何使用 Shiro
    下面以用戶登錄為例:UsernamePasswordToken token = new UsernamePasswordToken(username, password);token可以理解為用戶令牌,登錄的過程被抽象為Shiro驗證令牌是否具有合法身份以及相關權限。
  • 郵箱163登錄入口,郵箱163如何註冊?
    面對郵箱行業主流的163.net、163vip.com等品牌,深受廣大用戶的喜愛及關注。關於郵箱163的登錄入口,郵箱163如何註冊的流程,今天小編以好用的個人會員郵箱為大家做分享~ 一.關於郵箱163如何註冊 首先,通過網頁搜索如「TOM VIP郵箱」或直接輸入網址,如163.net郵箱。根據提示找到「註冊」入口。
  • 30分鐘學會如何使用Shiro,看這篇文章就夠了!
    下面以用戶登錄為例:UsernamePasswordToken token = new UsernamePasswordToken(username, password);token可以理解為用戶令牌,登錄的過程被抽象為Shiro驗證令牌是否具有合法身份以及相關權限。
  • TokenPocket區塊鏈科普系列--FIO是什麼?
    什麼是FIO和ENS類似,FIO也是去中心化域名服務。它像是一座橋梁,連接起錢包、交易所、加密支付受理方等應用。FIO協議旨在通過抽象私鑰和公共地址的理解,從而降低新用戶進入加密貨幣的門檻。用戶可以使用類似電子郵件地址的FIO地址,從而省去了使用使用私鑰和公共地址的麻煩。
  • 谷歌的「隱私沙盒」方案如何能夠平衡廣告收益與用戶隱私?|...
    去年10月,谷歌負責用戶信任和透明度產品管理的負責人Chetna Bindra接受了《廣告周刊》(Adweek)的採訪,對於W3C內部關於隱私沙箱的爭論Bindra表示,「谷歌瀏覽器團隊十多年來一直致力於向開源網站的方向靠攏,現在正在研究新的算法模型」。
  • ​​TAVI術後,阿司匹林單藥與DAPT的療效安全性孰優孰劣
    PARTNER研究[3]顯示,TAVI術後30天卒中和大出血發生率分別為6.7%和16.8%,因而平衡血栓和出血風險尤為重要。目前國內外主流指南推薦TAVI術後使用雙聯抗血小板治療(DAPT)3-6個月。但該推薦借鑑了經皮冠狀動脈介入(PCI)治療經驗,即在阿司匹林的基礎上聯用其他藥物可以降低缺血事件風險。
  • 如何通過低延遲語音響應改善用戶體驗和安全性
    使用基於雲的系統來添加語音識別是一種選擇,但這會帶來用戶隱私和延遲問題。它們還要求最終用戶具有可訪問的網絡,並且對於許多智能家居和消費物聯網應用而言,這往往會產生高昂成本。 本文引用地址:http://www.eepw.com.cn/article/202004/411608.htm為了幫助設計師應對這些挑戰,恩智浦將離線語音控制帶到了邊緣。
  • 以趣頭條為例,拆解單用戶價值模型
    產品是企業交付服務於用戶的載體,只有在收入和成本達到平衡,服務才會長期穩定提供。這種平衡的評估方式,有從「單位服務」角度出發的「單位經濟模型」,也有從「單用戶營收」角度出發的「單用戶價值模型」,本文淺談後者。
  • 針對用戶流失,如何做好預警和召回機制
    流失用戶一般指的是一段時間內未訪問或登錄過網站/APP的用戶,一般流失用戶都是對於那些需要註冊、提供應用服務的網站而言的,比如微博、郵箱、電子商務類網站等。 不同網站對於流失的定義可能各不相同,對於微博和郵箱這類用戶幾乎每天登錄查看的網站而言,可能用戶未登錄超過1個月,我們就可以認為用戶可能已經流失了。
  • 悟空租車APP整改通過 進一步提升用戶體驗
    10月26日,工業和信息化部向社會通報了131家存在侵害用戶權益行為APP企業的名單。截至11月10日,經第三方檢測機構核查復檢,有71家按照工業和信息化部要求完成整改,在列的悟空租車,經工信部信息通信管理局確認,整改結果已符合相關要求。
  • 利用jwt 可以獲取用戶的額外信息?
    作者 | 單一色調 責編 | 張文頭圖 | CSDN 下載自視覺中國今天內容主要是解決一個問題:如何在 jwt 中添加用戶的額外信息並在資源伺服器中獲取這些數據。涉及的小問題有以下三個:如何在返回的 jwt 中添加自定義數據;如何在 jwt 中添加用戶的額外數據,比如用戶 id、手機號碼;如何在資源伺服器中取出這些自定義數據。下面我們分別來看如何實現。
  • 百度產品面試題:如何優化迪士尼排隊流程,提升用戶體驗?
    一、市場角度解決放到這道題來看,需要提升排隊時的用戶體驗,說明用戶排隊時間較長。用戶等候服務的時間和用戶體驗是成正比的:等候時間越長,用戶體驗越差。你想像一下:你特別想喝一個奶茶,馬上就能喝到vs等了1個多小時才喝到,這個過程你煎熬的心情。