实在是思维江化啊,没有想到可以给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('重要的数据')

使用redis实现客户端和服务端token验证的更多相关文章

  1. Asp.Net MVC 模型验证详解-实现客户端、服务端双重验证

    概要 在asp.net webform开发中经常会对用户提交输入的信息进行校验,一般为了安全起见大家都会在客户端进行Javascript(利于交互).服务端双重校验(安全).书写校验代码是一个繁琐的过 ...

  2. Java 实现Redis客户端,服务端

    Java 实现Redis客户端,服务端 1.Java实现Redis发布订阅 1.1实例 2.[Redis]Java实现redis消息订阅/发布(PubSub) 3.java实现 redis的发布订阅 ...

  3. spring-oauth-server实践:客户端和服务端环境搭建

    客户端:http://localhost:8080/spring-oauth-client/index.jsp 服务端:http://localhost:8080/spring-oauth-serve ...

  4. 基于开源SuperSocket实现客户端和服务端通信项目实战

    一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...

  5. Token:服务端身份验证的流行方案【转】

    01- 身份认证 服务端提供资源给客户端,但是某些资源是有条件的.所以服务端要能够识别请求者的身份,然后再判断所请求的资源是否可以给请求者. token是一种身份验证的机制,初始时用户提交账号数据给服 ...

  6. WCF客户端获取服务端异常[自定义异常]

    引言 经过不断的摸索,询问/调试,终于学会了关于WCF客户端与服务端之间异常的处理机制,在此来记录自己的成果,用于记录与分享给需要的伙伴们. 首先感谢[.NET技术群]里群主[轩]的大力帮助,如有需要 ...

  7. Token:服务端身份验证的流行方案

    01- 身份认证 服务端提供资源给客户端,但是某些资源是有条件的.所以服务端要能够识别请求者的身份,然后再判断所请求的资源是否可以给请求者. token是一种身份验证的机制,初始时用户提交账号数据给服 ...

  8. TCP学习之五:客户端、服务端异步传输字符串

    参考学习张子阳大神的博客:http://www.cnblogs.com/JimmyZhang/category/101698.html 消息发送接口: 消息接收接口: 客户端: 服务端: 消息发送类: ...

  9. TCP学习之三:客户端、服务端同步传输字符串

    参考学习张子阳大神的博客:http://www.cnblogs.com/JimmyZhang/category/101698.html 一个客户端.发送一条消息 客户端: 服务端: 注意:Networ ...

随机推荐

  1. nginx添加一个server

    nginx添加一个server server { listen 80; server_name dev.pccb.com; index index.html index.htm; # rewrite ...

  2. 【Java架构:基础技术】一篇文章搞掂:MyBatis

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文主要总结于刘增辉的<MyBatisc从入门到精通>一书,有兴趣的朋友可以自行研读 建议仔细研读官方文档: http ...

  3. (转)使用OpenGL显示图像(五)添加移动

    添加移动 编写:jdneo - 原文:http://developer.android.com/training/graphics/opengl/motion.html 转:http://hukai. ...

  4. Eclipse Missing artifact jdk.tools:jdk.tools:jar:1.6

    Missing artifact jdk.tools:jdk.tools:jar:1.6 问题出在Eclipse Maven的支持上,在Eclipse下,java.home变量设置为用于启动Eclip ...

  5. sublime useful packages

    Package control Prefixr Emmet

  6. 5. 使用grafana模板

    我们刚刚配置的Dashboard还是有点简陋,为了界面美观,这里我们这里使用一些模板 1.使用node_exporter模板 去grafana官网下载模板,点击Download,如下所示 2.导入模板 ...

  7. jmeter Thread Groups的顺序执行与并行执行

    本期目标: 理解Thread Groups的顺序执行与并行执行 控制因子:Run Thread Groups consecutively(i.e.one at time) 预期结论: 1.勾选 Run ...

  8. 第一记 搭建Java集成开发环境

    一.JDK JDK可以前往oracle官网进行下载并进行安装(我这边使用的是jdk1.8版本,也推荐使用jdk1.8及以上的) 下图是默认路径安装完成后的截图 安装完成会产生这两个文件夹 二.配置环境 ...

  9. 3.3-Cypher语言及语法使用

    Cypher是一种图数据库查询语言,表现力丰富,查询效率高,其地位和作用与关系型数据库中的SQL语言相当. Cypher具备的能力: Cypher通过模式匹配图数据库中的节点和关系,来提取信息或者修改 ...

  10. XStream的简单使用

    XStream XStream是一个java对象和xml相互转换的工具 创建XStream对象:XStream stream = new XStream() Java对象转换成xml:stream . ...