成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

由Session到Token的身份驗證演變過程理解Session、Cookie、Token

安全
本文將從Web應用 由傳統身份驗證到基于Token的身份驗證的演變過程的角度,介紹Session、Cookie、Token。

 本文將從Web應用 由傳統身份驗證到基于Token的身份驗證的演變過程的角度,介紹Session、Cookie、Token。

[[313415]]

很久以前,Web 應用基本用作文檔的瀏覽,如網絡黃頁。既然僅僅是瀏覽,因此服務器不需要記錄具體用戶在某一段時間里都瀏覽了哪些文檔,每次請求都是一個新的HTTP協議,對服務器來說都是全新的。

基于Session的身份驗證

隨著交互式Web應用的興起,比如,購物等需要登錄的網站。引出了一個新的問題,那就是要記錄哪些用戶登錄了系統進行了哪些操作,即要管理會話(什么是會話?簡單的講如果用戶需要登錄,那么就可以簡單的理解為會話,如果不需要登錄,那么就是簡單的連接。),比如,不同用戶將不同商品加入到購物車中, 也就是說必須把每個用戶區分開。因為HTTP請求是無狀態的,所以想出了一個辦法,那就是給每個用戶配發一個會話標識(Session id),簡單的講就是一個既不會重復,又不容易被找到規律以仿造的隨機字符串,使得每個用戶的收到的會話標識都不一樣, 每次用戶從客戶端向服務端發起HTTP請求的時候,把這個字符串給一并發送過來, 這樣服務端就能區分開誰是誰了,至于客戶端(瀏覽器)如何保存這個“身份標識”,一般默認采用 Cookie 的方式,這個會話標識(Session id)會存在客戶端的Cookie中。

雖然這樣解決了區分用戶的問題,但又引發了一個新的問題,那就是每個用戶(客戶端)只需要保存自己的會話標識(Session id),而服務端則要保存所有用戶的會話標識(Session id)。 如果訪問服務端的用戶逐漸變多, 就需要保存成千上萬,甚至幾千萬個,這對服務器說是一個難以接受的開銷 。 再比如,服務端是由2臺服務器組成的一個集群, 小明通過服務器A登錄了系統, 那session id會保存在服務器A上, 假設小明的下一次請求被轉發到服務器B怎么辦? 服務器B可沒有小明 的 session id。

可能會有人講,如果使小明登錄時,始終在服務器A上進行登錄(sticky session),豈不解決了這個問題?那如果服務器A掛掉怎么辦呢? 還是會將小明的請求轉發到服務器B上。

如此一來,那只能做集群間的 session 復制共享了, 就是把 session id 在兩個機器之間進行復制,如下圖,但這對服務器的性能和內存提出了巨大的挑戰。

 

由Session到Token的身份驗證演變過程理解Session、Cookie、Token

 

因此,又想到如果將所有用戶的Session集中存儲呢,也就想到了緩存服務Memcached——由于 Memcached 是分布式的內存對象緩存系統,因此可以用來實現 Session 同步。把session id 集中存儲到一臺服務器上, 所有的服務器都來訪問這個地方的數據, 如此就避免了復制的方式, 但是這種“集萬千寵愛于一身”使得又出現了單點故障的可能, 就是說這個負責存儲 session 的服務器掛了, 所有用戶都得重新登錄一遍, 這是用戶難以接受的。

 

由Session到Token的身份驗證演變過程理解Session、Cookie、Token

 

那么索性存儲Session的服務器也搞成集群,增加其可靠性,避免單點故障,但不管如何,Session 引發出來的問題層出不窮。

于是有人就在思考, 為什么服務端必須要保存這session呢, 只讓每個客戶端去保存不行嗎?可是服務端如果不保存這些session id ,又將如何驗證客戶端發送的 session id 的確是服務端生成的呢? 如果不驗證,服務端無法判斷是否是合法登錄的用戶,對,這里的問題是驗證, session 只是解決這個驗證問題的而產生的一個解決方案,是否還有其它方案呢?

基于Token 的身份驗證

例如, 小明已經登錄了系統,服務端給他發一個令牌(Token), 里邊包含了小明的 user id, 后續小明再次通過 Http 請求訪問服務器的時候, 把這個 Token 通過 Http header 帶過來不就可以了。

服務端需要驗證 Token是自己生成的,而非偽造的。假如不驗證任何人都可以偽造,那么這個令牌(token)和 session id沒有本質區別,如何讓別人偽造不了?那就對數據做一個簽名(Sign)吧, 比如說服務端用 HMAC-SHA256 加密算法,再加上一個只有服務端才知道的密鑰, 對數據做一個簽名, 把這個簽名和數據一起作為 Token 發給客戶端, 客戶端收到 Token 以后可以把它存儲起來,比如存儲在 Cookie 里或者 Local Storage 中,由于密鑰除了服務端任何其他用戶都不知道, 就無法偽造令牌(Token)。

 

由Session到Token的身份驗證演變過程理解Session、Cookie、Token

 

如此一來,服務端就不需要保存 Token 了, 當小明把這個Token發給服務端時,服務端使用相同的HMAC-SHA256 算法和相同的密鑰,對數據再計算一次簽名, 和 Token 中的簽名做個對比, 如果相同,說明小明已經登錄過了, 即驗證成功。若不相同, 那么說明這個請求是偽造的。

 

由Session到Token的身份驗證演變過程理解Session、Cookie、Token

 

這樣一來, 服務端只需要生成 Token,而不需要保存Token, 只是驗證Token就好了 ,也就實現了時間換取空間(CPU計算時間換取session 存儲空間)。沒了session id 的限制, 當用戶訪問量增大, 直接加機器就可以輕松地做水平擴展,也極大的提高了可擴展性。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-12-06 08:17:25

SessionCookieToken

2019-11-07 10:37:36

CookieSessionToken

2019-06-11 14:45:25

2023-12-11 11:29:35

2021-09-05 18:26:42

2021-08-09 08:53:30

HTTP狀態化協議

2017-03-20 08:41:00

2023-12-04 10:36:46

SessionCookie

2021-03-23 10:45:23

CookieSession前端

2020-01-17 10:48:14

SessionTokenHTTP

2024-02-21 08:19:54

2024-10-10 12:21:56

JWTSession擴展性

2023-12-27 08:16:54

Sessiontoken安全性

2019-11-12 13:45:11

WebCookieSession

2024-08-07 12:14:39

2021-03-03 13:25:35

CookieSessionToken

2019-12-04 13:50:07

CookieSessionToken

2021-05-19 09:37:45

SessionTokencookie

2020-04-07 01:04:18

SessionCookieToken

2021-09-01 10:15:15

前端cookiesession
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区在线观看免费 | 亚洲区一区二 | 99热成人在线 | 久久国产美女视频 | 久久中文字幕视频 | 成人免费看黄网站在线观看 | 欧美一区二区三区国产 | 麻豆精品一区二区三区在线观看 | 天天色影视综合 | 精品久久久久久久 | 在线视频一区二区三区 | 国产在线一区二 | 91视频在线观看 | 精品国产精品三级精品av网址 | 99re热这里只有精品视频 | 日日天天| 欧美男人天堂 | 天堂一区二区三区 | 丝袜美腿一区二区三区动态图 | 精品国产91| 可以免费看的毛片 | 蜜桃传媒一区二区 | 黄色片视频网站 | 午夜在线视频 | 一区二区视频在线观看 | 视频一区二区在线观看 | 羞羞在线视频 | 国产精品毛片一区二区三区 | 日批免费在线观看 | 欧美黑人体内she精在线观看 | 亚洲精品在线免费 | 99国产在线 | 天天操夜夜艹 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 91免费观看 | 国产福利视频导航 | 亚洲福利在线视频 | 久久人人爽人人爽 | 精品国产一区探花在线观看 | 久久久久久国产精品免费免费狐狸 | 国产成人精品亚洲日本在线观看 |