昨天在群里有同学文档,如果对外一个接口,有什么好的方案做验证吗?我当时给出了传入一个token到headers里,然后,在服务端获取这个token解析,验证合法性。那么我今天针对这个方案,给出一个小的demo,以供同学参考:
首先我们的方案是:利用 一个 签名 + 一个时间戳 生成一个md5 加密的token,并将这个token与时间戳一起放到headers中进行http请求,方法如下,我们先上图,然后进行解释:
好,我们开始逐行解释,首先导入3个包,time生成时间戳,hashlib进行加密,requests做http请求使用,
接下来 我们来定义一个内部统一的secret key 并 获得当前的时间戳 timestamp,并将他们拼在一起生成strdata,
然后我们创建token对象,这里我们选择md5的加密方式,也可以使用sha的加密(越高越难破解)
最后我们将token和timestamp放入headers并且通过requests传到接口,客户端的工作就完成了。那么我们看看接口端干了什么,一样先看图,后解释(请无视我的红色错误提示,我这里模拟django的一个语法场景进行的伪代码):
好,我们以这个伪代码为例,他是一个中间件业务,对于每个接口都会先走这个中间件函数,如果验证失败,会直接返回,验证通过,则走完中间件函数,直接继续执行,其实也可以理解为拦截器。
好,我们在中间件里,获取headers中的token和timestamp,如果有任一不存在都验证失败,返回false,之后要做的就是在服务器端使用和客户端达成一致的secret和传过来的timestamp生成服务器端的validtoken,并与客户端传过来的token进行对比,如果不一致,返回false。到这里就验证完成了。中间件不再拦截,进行接口操作~
总结:验证方式有太多种,有的是从客户端加密,服务端解密,也有我这种双方生成相同token验证的,传输方式不同的。这里给大家举一个例子,给大家一个参考
················
欢迎关注课程:
《Django入门到进阶-更适合Python小白的系统课程》
共同学习,写下你的评论
评论加载中...
作者其他优质文章