thinkphp在app接口开发过程中的通讯安全认证

thinkphp在app接口开发过程中的通讯安全认证

对于我们写好的接口,如果不经过安全认证就可以直接访问的话,则将对我们网站产生非常大的安全隐患,一些hack可能直接用你的接口去操作数据库,后果无法估量。那么如何才能进行有效的安全验证呢? 这里我采用了微信开发中的access_token机制,让app前端开发工程师通过提交appid和appsecert来获取token,服务器端对token缓存7200秒,客户端如果每次都直接请求token则token每次都会重置,所以推荐客户端也一样进行缓存,客户端可以通过判断本地token是否存在,如果存在则直接用token做参数去访问我们的api,服务端判断token的有效性并给予相应的返回,客户端缓存的token如果失效了,就直接再请求获取token,思路大概就是这样,下面我提供了完整的参考代码,如果有更好的方法,也请指教

<?php
namespace Home\Controller;
use Think\Controller; class IndexController extends Controller { public $appid = 'dmm888'; public $appsecret = 'http://cnblogs.com/dmm888'; public function index(){ $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>[ 您现在访问的是Home模块的Index控制器 ]</div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8'); } public function test(){ if(!isset($_GET['token'])){ $this->apiReturn(4001,'invalid token'); }else if(!S($_GET['token'])){ $this->apiReturn(4001,'invalid token'); } $data = array( 'id'=>2, 'username'=>'明之暗夜', 'info'=>array('age'=>24,'address'=>'学府路','url'=>'http://cnblogs.com/dmm888') ); if($data){ $this->apiReturn(200,'读取用户信息成功',$data,xml); } } public function getToken(){ $ori_str = S($this->appid.'_'.$this->appsecret); //这里appid和appsecret我写固定了,实际是通过客户端获取 所以这里我们可以做很多 比如判断appid和appsecret有效性等 if($ori_str){ //重新获取就把以前的token删除 S($ori_str,null); } //这里是token产生的机制 您也可以自己定义 $nonce = $this->createNoncestr(32); $tmpArr = array($nonce,$this->appid,$this->appsecret); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); // echo $tmpStr; //这里做了缓存 'a'=>b 和'b'=>a格式的缓存 S($this->appid.'_'.$this->appsecret,$tmpStr,7200); S($tmpStr,$this->appid.'_'.$this->appsecret,7200); } /** * 作用:产生随机字符串,不长于32位 */ function createNoncestr( $length = 32 ) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } }
 

 具体怎么验证我就不用写了吧,这样我们只需把appid和appsecret给app前端开发者 并告诉他怎么用就可以了 token就是唯一令牌  只有token有效才可以向下执行  从而安全性可以得到一定保证   

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112471.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vcs学习教程

    vcs学习教程vcs学习教程

    2022年4月21日
  • 预测算法用java实现吗_java 数据结构与算法

    预测算法用java实现吗_java 数据结构与算法常见的预测算法有1.简易平均法,包括几何平均法、算术平均法及加权平均法;2.移动平均法,包括简单移动平均法和加权移动平均法;3,指数平滑法,包括一次指数平滑法和二次指数平滑法,三次指数平滑法;4,线性回归法,包括一元线性回归和二元线性回归,下面我一一的简单介绍一下各种方法。 4P5?.C(B4j”^5_2h  一,简易平均法,是一种简便的时间序列法。是以一定观察期的数据求得

    2022年10月31日
  • 关于高德地图标注的那些坑

    关于高德地图标注的那些坑关于高德地图标注的那些坑。先说一下自己遇到的问题:在地图加载完成后自动弹出自定义的标注点和气泡框,然后当点击气泡框的时候,可以直接响应气泡框上的Button事件。

    2022年5月22日
  • 阿里笔试题整理1

    阿里笔试题整理11.下面哪一个不是动态链接库的优点?(B)A.共享B.装载速度快C.开发模式好D.减少页面交换知识补充1)动态链接库:a.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。b.使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。c.动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。https…

    2022年5月16日
  • Enterprise Library 企业库「建议收藏」

    Enterprise Library 企业库「建议收藏」1.Enterprise Library企业库介绍    是微软模式与实践团队开的应用程序块    安装Enterprise Library      下载 www.misrosoft.com/en-us/download/details.aspx?id=15104      安装后目录结构

    2022年10月20日
  • sql触发器

    sql触发器在SQLServer里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。常见的触发器有三种:分别应用于Insert,Update,Delete事件。我为什

    2022年7月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号