亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Session、JWT與OAuth2的特點是什么

發布時間:2022-01-19 16:18:04 來源:億速云 閱讀:179 作者:iii 欄目:開發技術

這篇文章主要講解了“Session、JWT與OAuth2的特點是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Session、JWT與OAuth2的特點是什么”吧!

Session模式

瀏覽器主流授權模式采用Session模式。

participant 瀏覽器 participant 服務器 瀏覽器->服務器: 用戶登錄 Note right of 瀏覽器: 提供用戶名、密碼 服務器->服務器: 產生并保存 Session ID Note right of 服務器: Session ID 與用戶關聯 服務器-->瀏覽器: 返回 Session ID 瀏覽器->瀏覽器: 自動將 Session ID 保存到 Cookie 瀏覽器->服務器: 再次訪問 Note right of 瀏覽器: 自動攜帶 Cookie (包含 Session ID) 服務器->服務器: 檢查 Session ID 是否存在 Note right of 服務器: 存在則自動匹配相應用戶并刷新 Session 過期時間 服務器-->瀏覽器: 返回響應結果

特點

  • 服務器端產生Session ID,瀏覽器每次訪問時攜帶Session ID作為身份標識。

  • Session過期時間一般為30分鐘,每次訪問會自動刷新過期時間。

優勢

  • 30分鐘無操作Session自動過期,增強安全性。

  • 服務器可將Session ID的Cookie設置成HttpOnly,可以防止js從Cookie讀取Session ID。避免XSS漏洞獲取Session ID。

  • 符合大部分人的使用習慣。

缺點

  • Session信息需要在服務器端保存一份副本。在多服務器(如集群)的情況下,需要進行Session同步。

  • Session只要保持刷新,則永久有效(除非用戶主動退出)。如果攻擊者從瀏覽器或者從數據傳輸中竊取到Session ID,則可以保持該Session ID永久有效。

JWT模式

JWT全稱為:JSON Web Token。適合分布式的授權模式。用戶登錄成功后,認證服務器會返回一個帶有簽名認證的JWT。JWT保存在客戶端(如瀏覽器或APP),每次訪問應用服務器時,將JWT放到http的header里面。不同于Session的集中管理,JWT自身就包含了用戶信息,每臺應用服務器可以自己獨自判斷JWT是哪個用戶、是否合法、是否過期,無需再向認證服務器確認,也沒有Session同步的問題。JWT至少包含以下信息:

  • sub: Subject,一般為用戶ID。

  • exp: Expiration Time。過期時間。

  • signature: 簽名。用于驗證JWT是否合法。

participant 用戶瀏覽器 participant 應用服務器 participant 認證服務器 用戶瀏覽器->應用服務器: 訪問登錄頁面 應用服務器-->用戶瀏覽器: 返回登錄頁面 用戶瀏覽器->認證服務器: 登錄請求 Note right of 用戶瀏覽器: 提供用戶名、密碼 認證服務器-->用戶瀏覽器: 提示用戶登錄成功 Note left of 認證服務器: 返回JWT,包含用戶ID、過期時間和簽名 用戶瀏覽器->應用服務器: 獲取數據 Note right of 用戶瀏覽器: header中攜帶JWT 應用服務器->應用服務器: 解析JWT Note right of 應用服務器: 通過簽名驗證JWT是否合法,判斷是否過期,并獲取用戶ID 應用服務器-->用戶瀏覽器: 返回數據

Access Token 和 Refresh Token

Access Token需要放到http的header里面,用于訪問各種資源。由于使用頻繁且使用場景復雜,泄露風險較大,因此過期時間會比較短,比如30分鐘。如果每30分鐘讓用戶重新登錄一次,顯然用戶體驗極差。所以認證服務器在返回Access Token時,還會同時返回一個Refresh Token。Refresh Token平時不使用,只用于從認證服務器獲取新的Access Token,會安全很多。

Refresh Token 有效期

Refresh Token的有效期通常為30天。但在很多手機APP應用,并不想讓用戶每30天就登錄一次。而將有效期設置為1年甚至2年,又覺風險稍大。

給Refresh Token增加一個認證有效期(如30天),有效期則可以較長(如1年)。只要在認證有效期內刷新,則可以獲取新的Refresh Token,認證有效期重新計算,有效期按前一個Refresh Token計算;如果過了認證有效期再刷新,則Refresh Token不刷新,且只能獲取到Remember Me權限的Access Token。

只要用戶在30天內使用了APP,則自動刷新Refresh Token,無需再次登錄。直到1年后刷新有效期到期,才需要再次登錄。

刷新Access Token時,自動返回新的Refresh Token。無需專門刷新Refresh Token。

Remember Me(記住我)

并且在瀏覽網站時,通常會有兩個級別的權限,一種是記住我的權限,一種是登錄的權限。

給Access Token增加Remember Me標識。如果Refresh Token過了認證有效期再刷新,則只能獲取到Remember Me權限的Access Token。

30分鐘自動過期

使用瀏覽器訪問時,不能長期保存Refresh Token(安全考慮)。必須在瀏覽器關閉或用戶退出時刪除Refresh Token。

要模擬Session 30分鐘過期的模式,可以規定在瀏覽器訪問時,返回的Refresh Token的認證有效期為30分鐘,用戶操作后再刷新Refresh Token,以維持Refresh Token的有效性。

Refresh Token可以保存到Cookie或者sessionStorage,確保關閉頁面時Refresh Token會被刪除。

刷新Token時機

可以每5分鐘自動刷新Token(不需要自動過期時)。如果需要自動過期,則要根據用戶的操作刷新。用戶每次操作時,如距離上次刷新Token時間超過5分鐘,則自動刷新Token。

每5分鐘刷新一次Token,可以更準確的監測在線人數,也更滿足模擬自動過期的要求。如果覺得5分鐘太短,可以嘗試10分鐘。

重新登錄時機

為了避免用戶正在操作的時候,突然Refresh Token到期重新登錄,應該在Refresh Token到期的最后30天中,用戶重新打開APP時,要求用戶重新登錄。

在線人數

如果需要監控在線人數,則認證服務器應該將登錄的數據寫入數據庫。由于Access Token的有效期很短,通常需要5分鐘到應用服務器刷新一次。因此可以很容易的監控到當前的在線人員。

如何將眾多的Access Token和Refresh Token與某個用戶的登錄關聯起來,關鍵在于用戶登錄時需要產生一個登錄ID,將這個ID寫入所有后續的Refresh Token和Access Token中,則可以知道任意一個Token是屬于哪個用戶的哪次登錄。

Refresh Token泄露監控

由于同一系列的Refresh Token都擁有同一個登錄ID,而每個Refresh Token都會在5分鐘或者更長的時間內刷新Access Token,因此只要有相同登錄ID的Refresh Token在5分鐘內刷新了兩次Access Token,就可判頂Refresh Token已經泄露。

強制下線

Refresh Token強制下線:需要在認證服務器記錄所有已發布并在刷新有效期內的Refresh Token(可以只記錄登錄ID),每次刷新token時,檢查登錄ID是否被強制下線。由于Refresh Token每5分鐘刷新一次,且Access Token有效期為30分鐘,這種下線不是即時生效的。但代價較低,只要在認證服務器處理即可。

Access Token強制下線:時效性高,立即下線,但代價也較高。需要每個應用服務器在驗證JWT時,向認證服務器進行校驗,以檢查Access Token對應的登錄ID是否被強制下線。這已經違反了JWT自描述的設計初衷,且性能損耗有可能非常大。不過在認證服務器和應用服務器為同一服務器的情況下,還是可用的。

OAuth 2

主要用于第三方登錄,如微信登錄、QQ登錄、微博登錄等。所有的應用都必須先到認證服務器備案(如微信、QQ、微博),獲取客戶端ID(Client ID)和客戶端密鑰(Client Secret)。

participant 用戶瀏覽器 participant 應用服務器 participant 認證服務器 用戶瀏覽器->應用服務器: 登錄請求 應用服務器-->用戶瀏覽器: 重定向至認證服務器 Note left of 應用服務器: 提供Client ID 用戶瀏覽器->認證服務器: 允許授權 Note right of 用戶瀏覽器: 提供用戶名、密碼和Client ID 認證服務器-->用戶瀏覽器: 返回授權碼并重定向至應用服務器 Note left of 認證服務器: 授權碼授權碼在瀏覽器中傳遞,可能被泄漏,所以只能用于獲取Token 用戶瀏覽器->應用服務器: 提供授權碼 應用服務器->認證服務器: 獲取Token Note right of 應用服務器: 提供授權碼、Client ID、Client Secret 認證服務器-->應用服務器: 返回Token 應用服務器->認證服務器: 獲取用戶信息 Note right of 應用服務器: 提供Token 認證服務器-->應用服務器: 返回Token對應用戶的信息 應用服務器-->用戶瀏覽器: 提示用戶登錄成功

感謝各位的閱讀,以上就是“Session、JWT與OAuth2的特點是什么”的內容了,經過本文的學習后,相信大家對Session、JWT與OAuth2的特點是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陇西县| 辉南县| 义乌市| 营口市| 德格县| 塔城市| 手游| 康定县| 湄潭县| 英超| 丰镇市| 嘉义县| 子洲县| 江达县| 淄博市| 资兴市| 莱阳市| 固始县| 林周县| 乌兰浩特市| 山东| 锡林浩特市| 彭州市| 黄大仙区| 政和县| 连江县| 保康县| 洛阳市| 道孚县| 万山特区| 资中县| 东兰县| 临澧县| 崇义县| 绍兴市| 蒙阴县| 梅河口市| 应用必备| 全州县| 奇台县| 沈丘县|