實現乙個簡單的基於Token的身份認證

2022-01-24 18:27:19 字數 1498 閱讀 4588

這個例子是基於客戶端與webapi進行進行互動的身份認證,當然也適用於其他情況下的身份認證。

簡單的互動過程:

1.首先輸入使用者名稱、密碼進行登入操作

2.伺服器驗證使用者名稱、密碼的正確性,驗證通過之後,伺服器對乙個json字串進行加密,加密的內容、加密方法可以自己確定。

本次我加密的內容主要是使用者名稱和登入時間,可根據需求新增其他加密內容,加密方法就是採用des加密。然後將加密的後的字串(token)返回給到客戶端,客戶端需要自己儲存起來。

3.接下來,客戶端的每次請求都需要帶上這個token。

4.對於客戶端的每次請求,伺服器首先都要去獲取token,檢查token是否合法,並解密token內容,檢查token是否過期等。

token格式

未加密之前的字串是什麼樣的呢,我這裡是最簡單的格式,如下:

登入認證通過之後,把這個json格式的字串進行加密生成字串token,返回給客戶端。

至於好處呢,伺服器不需要儲存會話狀態,不用擔心會話丟失,也可以減輕伺服器壓力,然後利用這種方式也方便部署分布式服務,將乙個服務拆分成多個小服務,減輕單台伺服器的壓力。

des加解密演算法

這裡只是一種加解密演算法而已,根據需要自己選擇合適的演算法。

const

string deskey = "

sddsdds

";//

秘鑰const

string desiv = "

errtertet

";//

向量//

加密public

string encryptdes(string toencrypt, string deskey, string

desiv)

//轉為base64後輸出

string str =convert.tobase64string(ms.toarray());

ms.close();

return

str;

} }

//解密

public

string decodedes(string paras, string deskey, string

desiv)

;try str =encoding.utf8.getstring(ms.toarray());

ms.close();

ret[

0] = "1"

; ret[

1] =str;}}

catch

(exception ex)

finally

return

ret;

}

Python 基於Redis實現乙個簡單的分布式鎖

redis lock.py import redis import time import threading 連線池方式 pool redis.connectionpool host 127.0.0.1 port 6379 redis con redis.redis connection pool...

基於Socket程式設計實現乙個簡單的Web伺服器

1.using system using system.collections.generic using system.linq using system.net using system.net.sockets using system.text using system.threading.t...

SpringBoot實現基於token的登入驗證

springboot實現基於token的登入驗證 基於token的登入驗證實現原理 客戶端通過使用者名稱和密碼呼叫登入介面,當驗證資料庫中存在該使用者後,將使用者的資訊按照token的生成規則,生成乙個字串token,返回給客戶端,客戶端在呼叫其他介面的時候,需要在請求頭上帶上token,來驗證登入...