API验证
def asset(request): client_md5_time_key=request.META.get('HTTP_OPENKEY') client_md5_key,client_ctime=client_md5_time_key.split('|') client_ctime=float(client_ctime) server_time=time.time() #时间验证,用服务器时间减去客户端提交时间,如果大于一定范围,即认定链接有问题,返回错误消息 if server_time-client_ctime>10: return HttpResponse("连接超时,请检查后重新连接") #规则验证,使用自己定义的字符串与时间生成MD5值,如果值提交错误,返回错误消息 temp="%s|%s"%(settings.AUTH_KEY,client_ctime) m=hashlib.md5() m.update(bytes(temp,encoding="utf-8")) server_md5_key=m.hexdigest() if server_md5_key !=client_md5_key: return HttpResponse("认证失败") #使用列表维护验证信息,清除超时信息,拒绝重复验证信息连接 for k in list(api_key_record.keys()):#此处循环的是字典的键,因为在循环字典本身时无法删除正在迭代的数据 v=api_key_record[k]#因为需要使用字典键值循环判断 if server_time>v: del api_key_record[k] if client_md5_time_key in api_key_record: return HttpResponse("拒绝重复链接") else: api_key_record[client_md5_time_key]=client_ctime+10 if request.method=="GET": return HttpResponse("私密数据,不展示")
API验证还有一种是基于数据层的加密,使用RAS对数据进行加密,即使API层面没有保护,也不会影响数据的安全,而且数据由于加密,没有实际意义,也不会造成损失