簡單令牌的組成;Uid(用戶的唯壹標識)、time(當前時間的時間戳)、sign(簽名)、hash算法壓縮的壹定長度的十六進制字符串。以防止令牌泄漏)。身份認證概述
由於HTTP是無狀態協議,它不知道誰訪問了我們的應用程序。這裏把用戶當作壹個客戶端,客戶端用用戶名和密碼認證通過了,但是下壹次這個客戶端發送請求的時候需要再次驗證。
壹般的解決方案是,當用戶請求登錄時,如果沒有問題,在服務器上生成壹條記錄,在記錄中可以說明登錄的用戶,然後將這條記錄的id發送給客戶端,客戶端收到後會將這個id存儲在壹個cookie中,下次用戶向服務器發送請求時可以帶上這個cookie,這樣服務器就會對cookie中的信息進行驗證。看看能不能在服務器上找到對應的記錄。如果可以,說明用戶通過了認證,然後把用戶請求的數據返回給客戶端。
上面描述的過程就是使用session,那個id值就是sessionid。我們需要將用戶生成的會話存儲在服務器上,這些會話將存儲在內存、磁盤或數據庫中。
基於令牌機制的身份認證
使用令牌機制的認證方法不需要在服務器端存儲用戶的登錄記錄。壹般流程:
客戶端請求使用用戶名和密碼登錄。
服務器收到驗證用戶名和密碼的請求。
驗證成功後,服務器會生成壹個令牌,然後發送給客戶端。
接收到令牌後,客戶端存儲它,它可以放在cookie或LocalStorage中。
客戶端每次向服務器發送請求時,都需要攜帶服務器發送的令牌。
服務器接收請求,然後驗證客戶端請求是否包含令牌。如果驗證成功,它會將請求的數據返回給客戶端。
使用令牌機制進行登錄身份驗證有以下幾種方式:
使用設備mac地址作為令牌。
客戶端:登錄時,客戶端獲取設備的mac地址,並將其作為參數傳遞給服務器。
服務器:服務器收到參數後,用變量接收,並在數據庫中保存為令牌,在會話中設置令牌。每次客戶端請求,都要統壹攔截,將客戶端傳遞的令牌與服務器會話中的令牌進行比較。如果令牌相同,則登錄成功,如果不同,則被拒絕。
這樣,客戶端和服務器統壹了唯壹標識,保證了每臺設備都有唯壹標識。缺點是服務器需要保存mac地址;好處是客戶端不需要再次登錄,登錄壹次就可以壹直使用,超時問題由服務器處理。
以上是邊肖對網站令牌機制的詳細解釋。
網站