單點登入之如何平衡 Token 安全性和使用者體驗?

2021-10-09 18:16:15 字數 2396 閱讀 6573

在 《idaas 技術解析系列(一)》中,我們介紹了在單點登入中token認證相對於傳統基於session認證的優勢,本文繼續介紹一組相關概念:access token & refresh token。

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

圖 1上圖表示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拆分成兩個,就是為了解決安全性和使用者體驗方面的矛盾——

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

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

圖 4手動結束使用者會話(如圖 5):

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

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

idaas 技術解析(一)單點登入之 token 認證

單點登入完成後,如何實現系統之間賬號自動同步?

idaas(identity as a service)即身份認證管理雲平台,它能提供多種標準化功能幫助使用者實現高效、安全的身份認證管理服務,如單點登入、智慧型多因素認證、賬號生命週期管理等等。由於 idaas 在國內尚屬於新興產品形態,很多人對它只有模糊的印象,所以我們計畫用一系列文章,深入淺出介紹 idaas 相關的技術原理和細節。

玉符官網

單點登入 之 OAuth

oauth2.0是什麼 豆瓣和qq的故事 oauth簡單說就是一種授權的協議,只要授權方和被授權方遵守這個協議去寫 提供服務,那雙方就是實現了oauth模式。第一步 在豆瓣官網點選用qq登入 第二步 跳轉到qq登入頁面輸入使用者名稱密碼,然後點授權並登入 第三步 跳回到豆瓣頁面,成功登入 這幾秒鐘之...

jsp如何實現單點登入

在做專案的過程中,我們經常會遇到這樣的情況,需要進行單點登入,也就是說使用者登入乙個系統的同時也登入到其他系統。這裡採用乙個例子說明如何實現單點登入 比方說,我乙個專案裡面 scott 要實現登入到這個專案的同時,登入到58同城。要實現登入倆個專案,肯定要有這倆個不同系統的使用者名稱跟密碼才能實現 ...

詳解PHP如何實現單點登入

單點登入 single sign on 簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。server端 瀏覽器端 當使用者第一次訪問應用系統的時候,因為還沒有登入,會被 引導到認證系統中進行登入 根據使...