密码三部验证

密码三部分验证:
--在规定的时间之内
--不能在已访问过的列表中
--密钥验证

agent 验证部分

import requests
import hashlib
import time

current_time = time.time()
app_id = '9898fdsddf3e2fd3s203dsf'  # 密钥
app_id_time = "%s|%s" %(app_id,current_time)

m = hashlib.md5()
m.update(bytes(app_id_time,encoding='utf-8'))
authkey = m.hexdigest()

authkey_time = "%s|%s" %(authkey,current_time)
print(app_id_time)
print(authkey)
print(authkey_time)

data = {'k1':{"t1":'v1'}}
response = requests.post(
    url='http://127.0.0.1:9000/assest/',
    json=data,
    headers={'authkey':authkey_time}
)
print(response.text)

server 验证部分

from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt,csrf_protect
import json
import hashlib
import time
# Create your views here.
key = '9898fdsddf3e2fd3s203dsf'
auth_list = []

@csrf_exempt
def assest(request):
    if request.method == "POST":
        auth_key_time = request.META['HTTP_AUTHKEY']
        client_authkey,client_time = auth_key_time.split('|')
        server_time = time.time()
        # 第一层是验证时间,10为秒数
        if server_time-10 > float(client_time):
            # 时间太久远了
            return HttpResponse("时间超时")

        # 第二层检测是否访问过,访问过的记录在 auth_list
        if auth_key_time in auth_list:
            # 访问过的
            return HttpResponse("auth key 已访问过了")

        m = hashlib.md5()
        key_client_time = "%s|%s" %(key,client_time)
        m.update(bytes(key_client_time, encoding='utf-8'))
        authkey = m.hexdigest()

        # 第三层,验证密钥是否正确
        if authkey != client_authkey:
            return HttpResponse("密钥验证失败")
        data = json.loads(str(request.body,encoding='utf-8'))
        print(data)
        # 这里少做了一步,就是把过时的key从list中删除
        auth_list.append(auth_key_time)
        print("auth_list = ",auth_list)
        return HttpResponse("验证成功")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在web服务器运行中,为了防止请求的文件打开有异常,要在判断文件是否以“.py”结尾之后加上异常调试。 搜索到了一...
    菩灵阅读 345评论 0 3
  • public class CVSClient { /** Cvs clinet instance used to ...
    jerval阅读 174评论 0 0
  • 今天是2017年第一天上班,正如预料的一样,日本在放假所以可以有时间整理之间收到的邮件和样板;但也有些意想不到的却...
    ancilapple阅读 223评论 0 2
  • 我上一本烧脑的书还停留在《道连格雷的画像》,下一站就直接拜服在了丹尼尔丹尼特老爷子的膝下。 呃,听着怪怪的。。 如...
    果大喵喵阅读 361评论 0 0
  • 没办法成为你的铠甲 全身上下都是软肋 即便这样 我也愿意 为你丢掉我最后的盔甲 1.“像一条冰冷的长蛇” 什么时候...
    加冰少糖阅读 264评论 0 0