亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

常見的鑒權方式有兩種,一種是基于session,另一種是基于token方式的鑒權,我們來淺談一下兩種 鑒權方式的區別。

兩種鑒權方式對比

session

  1. 安全性:session是基于cookie進行用戶識別的,cookie如果被截獲,用戶很容易受到跨站請求偽造的攻擊。
  2. 擴展性:session是有狀態的,是具有IP黏貼性和有中心化特性的,在分布式環境下,雖然每臺服務器業務邏輯一樣,但是session是保存在各個服務器中的,而且每個服務器內存是不共享的,如果使用session去實現分布式部署的話,需要使用其他的一些技術手段去實現,比如spring session,將session保存在第三方服務中,比如redis,這樣一旦第三方服務出現問題,整個驗權系統就會奔潰,在電商系統及高并發系統中的集群化處理顯然是不合適的。
  3. 抗壓能力:通常session是存儲在內存中的,每個用戶通過認證后都會將session存儲在服務器內存中,當用戶量增大的情況下服務器的壓力也隨之增大。

token

  1. 安全性:瀏覽器會將接收到的token值存儲在Local Storage中,(通過js代碼寫入Local Storage,通過js獲取,并不會像cookie一樣自動攜帶)
  2. 擴展性:token是無狀態的,是去中心化的,在分布式環境下,各個服務器中的服務只對token進行數據查詢,它不需要在服務端保留用戶信息或者會話信息,這意味著用戶不需要考慮登錄的是哪一臺服務器,高效的解決了session擴展性的弊端。
  3. 抗壓能力:token與session的不同主要在認證成功后,會對當前用戶數據進行加密,生成一個加密字符串token,返還給客戶端(服務器端并不進行保存)

基于token的鑒權方式

業界常用的授權標準有兩種,一種是使用auth2,這種方式更適合于類似第三方授權登錄,比如微信、微博、QQ信任登錄業務。另一種是oauth,即第三方無需知道用戶和密碼就可以申請獲得該資源的授權,更適用于對用戶的權限校驗并分配訪問權限,比如常見的登錄后分配可見資源(按鈕、菜單等)類型網站。

JAVAshop電商系統 采用的是oauth方式的鑒權標準。我們以系統的應用為例來介紹oauth的方案。

基于token機制鑒權架構

 

1. 登錄

服務端校驗密碼,成功后返回access_token和refresh_token,客戶端記錄上述token。

2. 訪問API

在訪問API之前解析access_token,并且查看是否過期,如果不過 期則請求API,如果過期,則要刷新令牌,在請求API。

3. 刷新token

攜帶有效期的refresh_token換回有效token,如果refresh_token過期,則需要用戶重新登錄。

4. 注銷

請求注銷api,服務器端和客戶端應同時刪除token的存儲。

基于token機制鑒權架構

 

1. 客戶端請求API

攜帶access_token信息,如果生成環境不會直接攜帶access_token,會使用加密后的簽名校驗。祥見以下防重放機制。

2. 獲取token

根據環境不同而有不同的獲取token方式。

3. 解析token

通過JWT工具將token解析。

4. 由redis讀取token

根據uid拼接key讀取access_token, 如果不存在這個用戶的token說明已經登出。

5. 驗證token

判斷次token是否屬于此uid,判斷token是否過期,如果過期則進行以下刷新token的流程。

6. 注入權限

如果token驗證成功,根據user信息生成權限注入到spring安全上下文中。

刷新token流程

基于token機制鑒權架構

 

1. 客戶端請求API

攜帶refresh_token,如果是生產環境不會直接攜帶refresh_token信息,詳見以下防重放攻擊。

2. 獲取token

根據環境不同而有不同的獲取token方式。

3. 解析token

通過JWT工具將token解析。

4. token讀取

根據uid拼接key讀取出access_token,如果不存在這個用戶的token說明用戶已經登出。

5. 驗證token

判斷此token是否屬于此uid,判斷token是否已經過期,如果過期,則返回refresh_token過期錯誤,此時用戶需要重新登錄。

6. 刷新token

如果refresh_token 驗證成功,則重新生成access_token和refresh_token,上述有效期以當前時間向后計算,替換此用戶在redis中的token,并將token返回給客戶端。

防重放機制

基于token機制鑒權架構

 

一、 參數的讀取

1. 在生產環境時,不能直接傳遞token,而是要傳遞簽名數據,服務器端驗簽后由Redis中獲取簽名。

2. 如果是非生產環境,直接由header中讀取token。

二、 生產環境傳遞如下參數

memberid (用戶id)

nonce(隨機字串,6位)

timestamp(當前時間戳,到秒)

sign= md5( uid+ nonce + timestamp +token )

三、 驗證邏輯

1. 驗證時間戳

判斷時間戳是否起過60s,大于60s則判別為重放功擊。

2. 驗證nonce

首先驗證nonce在 reids中是否存在,如果存在,則判別為重放功擊,否則將nonce記錄在redis中(key為:"nonce"+uid+"_"+nonce),失效時間為60s。

3. 驗證sign

md5( uid+ nonce + timestamp +token ) 驗證是簽名是否通過。

4. 驗證token

通過uid拿到token ,驗證邏輯同驗權流程。

當然在不同的業務場景下實現方案是多種多樣的,僅以此方案拋轉引玉,供大家參考。

分享到:
標簽:token
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定