美文网首页
php接口签名验证

php接口签名验证

作者: 庆庆_ce88 | 来源:发表于2019-04-20 10:12 被阅读0次

在做一些api接口设计时候会遇到设置权限问题,比如我这个接口只有指定的用户才能访问。

很多时候api接口是属于无状态的,没办法获取session,就不能够用登录的机制去验证,那么

大概的思路是在请求包带上我们自己构造好的签名,这个签名必须满足下面几点:

a、唯一性,签名是唯一的,可验证目标用户

b、可变性,每次携带的签名必须是变化的

c、时效性,具有一定的时效,过期作废

d、完整性,能够对数据包进行验证,防止篡改

直接看下面代码

<?php

// 设置一个公钥(key)和私钥(secret),公钥用于区分用户,私钥加密数据,不能公开

$key ="c4ca4238a0b923820dcc509a6f75849b";$secret ="28c8edde3d61a0411511d3b1866f0636";

// 待发送的数据包

$data =array('username'=>'abc@qq.com','sex'=>'1','age'=>'16','addr'=>'guangzhou','key'=> $key,'timestamp'=> time(),);

// 获取sign

functiongetSign($secret, $data){

// 对数组的值按key排序

ksort($data);

// 生成url的形式

$params = http_build_query($data);

// 生成sign

$sign = md5($params . $secret);return$sign;}

// 发送的数据加上sign$data['sign'] = getSign($secret, $data);

/** * 后台验证sign是否合法 *@param[type] $secret [description] *@param[type] $data  [description] *@return[type]        [description] */

functionverifySign($secret, $data){

// 验证参数中是否有签名

if(!isset($data['sign']) || !$data['sign']) {

echo'发送的数据签名不存在';die();    

}

if(!isset($data['timestamp']) || !$data['timestamp']) {

echo'发送的数据参数不合法';die();   

 }

// 验证请求, 10分钟失效

if(time() - $data['timestamp'] >600) {

echo'验证失效, 请重新发送请求';die();   

 }   

 $sign = $data['sign'];unset($data['sign']); 

   ksort($data);    

$params = http_build_query($data);

// $secret是通过key在api的数据库中查询得到

$sign2 = md5($params . $secret);if($sign == $sign2) {

die('验证通过');  

 }else{

die('请求不合法');    

}}?>

相关文章

  • PHP 接口签名验证

    概览 工作中,我们时刻都会和接口打交道,有的是调取他人的接口,有的是为他人提供接口,在这过程中肯定都离不开签名验证...

  • php接口签名验证

    在做一些api接口设计时候会遇到设置权限问题,比如我这个接口只有指定的用户才能访问。 很多时候api接口是属于无状...

  • php实现支付接口签名验证

    前言 游戏服务器的玩家充值流程,如果通过google商店或者app store进行充值的话,需要实现回调支付地址。...

  • PHP开发API接口签名及验证

  • API接口签名验证

    点击访问原文您还可以加入全栈技术交流群(QQ群号:254842154) 系统从外部获取数据时,通常采用API接口调...

  • HMAC-SHA1 HMAC-SHA256 两种加密方式

    HMAC (Hash-based Message Authentication Code) 常用于接口签名验证 支...

  • WeChat网页开发工具集合

    验证签名工具 签名工具.png 微信公众平台接口调试工具 接口调试工具.png 发放普通红包 公众号支付介绍 微信...

  • 2018-03-05 java和php json字符串传输造成的

    java代码详见阿里巴巴录音转文字代码; php代码 原php验证签名有误:: 首先json数据和java的jso...

  • 2019-01-16-签名

    开放平台api接口签名验证说明 https://blog.csdn.net/vtopqx/article/deta...

  • 开放api接口签名验证

    你在写开放的API接口时是如何保证数据的安全性的?我们通过http Post或者Get方式请求服务器的时候,会面临...

网友评论

      本文标题:php接口签名验证

      本文链接:https://www.haomeiwen.com/subject/yhdkgqtx.html