django项目之api验证部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django项目之api验证部分相关的知识,希望对你有一定的参考价值。
目的:
为了客户端与服务器端之间的访问安全,不被第三者拦截,所以需要api验证。
客户端部分:
首先需要写一段复杂的key,用key来作为安全秘钥,同样在服务器端也会有一个相同的key。
然后我们还需要一个时间戳。#时间戳可以相当于动态加密
之后将key和时间戳拼接,再用Md5方法加密。 #更加安全
之后将加密后结果再与时间戳拼接写到请求头中发给服务端。 #为了让服务端解密所以需要将时间戳直接发送给服务端
以上就是我们在客户端要做的内容。
代码如下:
服务端
首先我们需要写一个和客户端相同的Key
然后写一个视图函数,
首先我们需要将request中的请求头取出来,通过split取出秘钥(加密的Key和时间戳),以及时间戳;
然后我们将取出的时间戳转为Float格式,并且服务端自己在取一个float格式的时间戳;
首先,第一关验证判断,如果客户端时间戳+(规定时间秒数) < 服务器当前时间戳,那么则认为该客户端内容过时了,失去了时效性。
然后,如果加上规定描述符合要求,大于当前时间,那么继续下一条验证
我们将服务端的key与刚才的时间戳拼接,放到与客户端相同的md5方法中验证匹配,查看结果是否相同,
如果不相同,这说明该客户端的md5被更改过。
如果上一条匹配成功了,没有问题,那么我们进行最后一条验证,判断该请求是否为二次请求
如果这条请求,之前已经访问过服务器,即便是在规定时间内我们也判断为不合法,因为有可能有人会利用这段时间通过相同的md5来做非法请求。
所以我们建立一个空字典,如果为第一次请求,字典里没有该条秘钥md5,我们认为是第一次请求,允许访问,并将该md5存入字典当中,当规定秒数之内再来访问,
判断字典中已经存在该md5,我们判断为非法请求,拒绝访问。
具体代码如下图:
最后为了使用方便,我们将该段代码写成装饰器,灵活使用。
如下图:
以上是关于django项目之api验证部分的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django REST Framework 作为 Django 的身份验证后端