继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

利用python-hashlib 做接口验证token

2019-11-20 10:54:143857浏览

deweizhang

1实战 · 19手记 · 4推荐
TA的实战

昨天在群里有同学文档,如果对外一个接口,有什么好的方案做验证吗?我当时给出了传入一个token到headers里,然后,在服务端获取这个token解析,验证合法性。那么我今天针对这个方案,给出一个小的demo,以供同学参考:

首先我们的方案是:利用 一个 签名 + 一个时间戳 生成一个md5 加密的token,并将这个token与时间戳一起放到headers中进行http请求,方法如下,我们先上图,然后进行解释:

http://img2.sycdn.imooc.com/5dd4a8280001a27808080464.jpg

好,我们开始逐行解释,首先导入3个包,time生成时间戳,hashlib进行加密,requests做http请求使用,

接下来 我们来定义一个内部统一的secret key 并 获得当前的时间戳 timestamp,并将他们拼在一起生成strdata,

然后我们创建token对象,这里我们选择md5的加密方式,也可以使用sha的加密(越高越难破解)

最后我们将token和timestamp放入headers并且通过requests传到接口,客户端的工作就完成了。那么我们看看接口端干了什么,一样先看图,后解释(请无视我的红色错误提示,我这里模拟django的一个语法场景进行的伪代码):

http://img3.sycdn.imooc.com/5dd4aa6b000161bf07590451.jpg

好,我们以这个伪代码为例,他是一个中间件业务,对于每个接口都会先走这个中间件函数,如果验证失败,会直接返回,验证通过,则走完中间件函数,直接继续执行,其实也可以理解为拦截器。

好,我们在中间件里,获取headers中的token和timestamp,如果有任一不存在都验证失败,返回false,之后要做的就是在服务器端使用和客户端达成一致的secret和传过来的timestamp生成服务器端的validtoken,并与客户端传过来的token进行对比,如果不一致,返回false。到这里就验证完成了。中间件不再拦截,进行接口操作~


总结:验证方式有太多种,有的是从客户端加密,服务端解密,也有我这种双方生成相同token验证的,传输方式不同的。这里给大家举一个例子,给大家一个参考

················

欢迎关注课程:

《Django入门到进阶-更适合Python小白的系统课程》

  金职位 Python工程师2020版


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP