为了账号安全,请及时绑定邮箱和手机立即绑定

利用python-hashlib 做接口验证token

标签:
Python

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

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

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

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

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

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

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

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

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

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


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

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

欢迎关注课程:

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

  金职位 Python工程师2020版


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消