使用redis實現客戶端和服務端token驗證


實在是思維江化啊,沒有想到可以給redis設置不同的key值來實現不同key值存儲不同的value值,而一直想着給一個名為token的key值新增不同的數據,並設置過期時間,然而這樣卻不能新增只能做到覆蓋,因此糾結了好一會。狠狠抽自己一巴掌Ծ‸Ծ。

client端

import requests
token = "dnsjabdjsabdnjsabdnjsabjdsbajhdbsa"

###### 1.第一種,對稱加密

# res = requests.get('http://127.0.0.1:8000/asset/', headers={'token':token})
# print(res.text)

###### 2.第二種,不對稱加密
import time

ctime = time.time()

tmp = "%s|%s" % (token, ctime)

import hashlib

m = hashlib.md5()
m.update(bytes(tmp, encoding='utf8'))
res = m.hexdigest()

client_token = "%s|%s" % (res, ctime)

print(client_token)
res = requests.get('http://127.0.0.1:8000/asset/', headers={'token':client_token})
print(res.text)

server端

#三層驗證,保證安全性
def asset(request):

    if request.method == 'POST':

        print(request.body)

        return HttpResponse('ok')
    else:
		#### 連接數據庫, 獲取存儲的主機名
        token = 'dnsjabdjsabdnjsabdnjsabjdsbajhdbsa'
        #META里面是http的一些請求頭信息
        res = request.META.get('HTTP_TOKEN')
        client_token, ctime = res.split('|')
        # if token != client_token:
        #     return  HttpResponse('非法的請求!')
		
        #第一關,設置有效時間
        server_time = time.time()

        if float(server_time) - float(ctime) > 20:
            return HttpResponse('第一關:key過期')
		
        #第二關,校驗token值
        tmp = "%s|%s" % (token, ctime)
        import hashlib
        m = hashlib.md5()
        m.update(bytes(tmp, encoding='utf8'))
        server_token = m.hexdigest()

        if server_token != client_token:
            return  HttpResponse('第二關:非法的請求!')

        ### 第三關,token只能使用一次,並設置過期時間,防止數據堆積
        ### decode_responses=True可以使從redis得到的數據不是bytes類型
        
        ### django連接redis, 將key發到redis中, 並設置過期時間
        r = redis.Redis(host='127.0.0.1', port=6379, db=1,decode_responses=True)

        #實現方法,就是這么簡單
        if ctime==r.get(client_token):
            return HttpResponse('第三關 已經訪問過了')
        r.setex(client_token,20,ctime)
        return HttpResponse('重要的數據')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM