当APP发送get或post请求来,首先应该要认证是不是本公司的APP发来的请求吧,所以,我猜测,然后就应该像登陆账号一样创建个session,以后再访问,就不用再验证了吧。。。
请问是不是这样的过程啊,在实际项目中如何实现这个功能的?
9 个解决方案
#1
app 和 php 约定一种加密方式
加密方式中带上 密钥
把密钥配置在 app 和 php 中
这样只有带密钥的访问才可以验证通过
加密方式中带上 密钥
把密钥配置在 app 和 php 中
这样只有带密钥的访问才可以验证通过
#2
这种验证,是第一次验证成功了,就是持久的。还是每次连接都需要验证呢?如,从APP的初始页,到第一个页面,再从第一个页面到第二个页面……
#3
有没有示例给参考下?谢谢!
#4
//加密,这里用 php 模拟加密方式,实际加密方式按 app 的语言来写
$data = array(
'name' => 'zhangsan',
);
$key = 'key';//app 和 php 都有
$param = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC);
$r= base64_encode($param);
//解密
$str = $_POST;
$str = base64_decode($str);
$data = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC);
print_r($data);
#5
楼上的很明确了
约定好加密方式
比如app传参数 a、b、c 同时传个参数sign=md5(a+b+c+约定好的key值)
后台每次接受参数时使用同样的加密方式与app提交的参数sign进行对比
约定好加密方式
比如app传参数 a、b、c 同时传个参数sign=md5(a+b+c+约定好的key值)
后台每次接受参数时使用同样的加密方式与app提交的参数sign进行对比
#6
参考:http://gdown.baidu.com/ad/app_show_doc.pdf
这里面有完整的代码demo:
2.3. sign 校验参数加密约定
sign 参数值都是以如下参数签名算法获得:
1. 将所有输入参数(包括 GET 和 POST 参数,但排除 sign 参数)格式化为"key=value"键值对格式,
如"k1=v1"、"k2=v2"、 "k3=v3";
2. 将格式化好的参数,按键值升序排序后,拼接在一起,如"k1=v1k2=v2k3=v3";
注:直接拼接,无需&等中间符号,也不要进行 urlencode 编码
3. 在拼接好的字符串末尾拼接上百度分配的 secure_key,其实就是渠道号,假设 secure_key 为 abc,
拼接后的字符串如下:"k1=v1k2=v2k3=v3abc";
4. 对 3 中获取到的字符串算 MD5 签名,签名值即为 sign 参数的值
5. 注意:计算 MD5 签名时,请使用 utf8 编码,并参考加密结果是否与下面示例一致:
“123”的md5:202cb962ac59075b964b07152d234b70
“中国百度”的 md5:0336bf2b3c309d606403f8689b825fcb
这里面有完整的代码demo:
PHP 接口示例
$params = array();
$params['userid'] = '用户 ID ';
$params['time'] = time();
$params['package'] = 'app 包名';
$arr = array();
/*在这里构造要 POST 应用秀数据*/
//转成 JSON 字符串
$params['data'] = json_encode($arr);
$secure_key = '百度分配的 secure_key';
//签名参数
$params['sign'] = generate_sign($params, $secure_key);
$url = 'http://117.185.16.110:8080/index.php/api/addUpdLifeService';
$response = httphelper::curl($url, 'POST', $params); // 通过 POST 获取指定 url 的返回内容
//对返回的$response 进行 json 反序列化后,继续你们的业务处理
/*对要提交的参数进行签名,计算 md5*/
function generate_sign($params, $secret) {
$str = '';
//先将参数以其参数名的字母升序进行排序
ksort($params);
//遍历排序后的参数数组中的每一个 key/value 对
foreach ($params as $k => $v) {
//为 key/value 对生成一个 key=value 格式的字符串,并拼接到签名字符串后面
$str .= "$k=$v";
}
//将签名密钥拼接到签名字符串最后面
$str .= $secret;
return md5($str); // 返回小写 md5
"tag2": "专车,租车",
"url": "http://www.baidu.com"
}
]
}
}
}
2.3. sign 校验参数加密约定
sign 参数值都是以如下参数签名算法获得:
1. 将所有输入参数(包括 GET 和 POST 参数,但排除 sign 参数)格式化为"key=value"键值对格式,
如"k1=v1"、"k2=v2"、 "k3=v3";
2. 将格式化好的参数,按键值升序排序后,拼接在一起,如"k1=v1k2=v2k3=v3";
注:直接拼接,无需&等中间符号,也不要进行 urlencode 编码
3. 在拼接好的字符串末尾拼接上百度分配的 secure_key,其实就是渠道号,假设 secure_key 为 abc,
拼接后的字符串如下:"k1=v1k2=v2k3=v3abc";
4. 对 3 中获取到的字符串算 MD5 签名,签名值即为 sign 参数的值
5. 注意:计算 MD5 签名时,请使用 utf8 编码,并参考加密结果是否与下面示例一致:
“123”的md5:202cb962ac59075b964b07152d234b70
“中国百度”的 md5:0336bf2b3c309d606403f8689b825fcb
#7
好久没来csdn了 ,楼上回复的不错学习了
#8
这个要做个记号!
#9
插眼,学习了
#1
app 和 php 约定一种加密方式
加密方式中带上 密钥
把密钥配置在 app 和 php 中
这样只有带密钥的访问才可以验证通过
加密方式中带上 密钥
把密钥配置在 app 和 php 中
这样只有带密钥的访问才可以验证通过
#2
这种验证,是第一次验证成功了,就是持久的。还是每次连接都需要验证呢?如,从APP的初始页,到第一个页面,再从第一个页面到第二个页面……
#3
有没有示例给参考下?谢谢!
#4
//加密,这里用 php 模拟加密方式,实际加密方式按 app 的语言来写
$data = array(
'name' => 'zhangsan',
);
$key = 'key';//app 和 php 都有
$param = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC);
$r= base64_encode($param);
//解密
$str = $_POST;
$str = base64_decode($str);
$data = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC);
print_r($data);
#5
楼上的很明确了
约定好加密方式
比如app传参数 a、b、c 同时传个参数sign=md5(a+b+c+约定好的key值)
后台每次接受参数时使用同样的加密方式与app提交的参数sign进行对比
约定好加密方式
比如app传参数 a、b、c 同时传个参数sign=md5(a+b+c+约定好的key值)
后台每次接受参数时使用同样的加密方式与app提交的参数sign进行对比
#6
参考:http://gdown.baidu.com/ad/app_show_doc.pdf
这里面有完整的代码demo:
2.3. sign 校验参数加密约定
sign 参数值都是以如下参数签名算法获得:
1. 将所有输入参数(包括 GET 和 POST 参数,但排除 sign 参数)格式化为"key=value"键值对格式,
如"k1=v1"、"k2=v2"、 "k3=v3";
2. 将格式化好的参数,按键值升序排序后,拼接在一起,如"k1=v1k2=v2k3=v3";
注:直接拼接,无需&等中间符号,也不要进行 urlencode 编码
3. 在拼接好的字符串末尾拼接上百度分配的 secure_key,其实就是渠道号,假设 secure_key 为 abc,
拼接后的字符串如下:"k1=v1k2=v2k3=v3abc";
4. 对 3 中获取到的字符串算 MD5 签名,签名值即为 sign 参数的值
5. 注意:计算 MD5 签名时,请使用 utf8 编码,并参考加密结果是否与下面示例一致:
“123”的md5:202cb962ac59075b964b07152d234b70
“中国百度”的 md5:0336bf2b3c309d606403f8689b825fcb
这里面有完整的代码demo:
PHP 接口示例
$params = array();
$params['userid'] = '用户 ID ';
$params['time'] = time();
$params['package'] = 'app 包名';
$arr = array();
/*在这里构造要 POST 应用秀数据*/
//转成 JSON 字符串
$params['data'] = json_encode($arr);
$secure_key = '百度分配的 secure_key';
//签名参数
$params['sign'] = generate_sign($params, $secure_key);
$url = 'http://117.185.16.110:8080/index.php/api/addUpdLifeService';
$response = httphelper::curl($url, 'POST', $params); // 通过 POST 获取指定 url 的返回内容
//对返回的$response 进行 json 反序列化后,继续你们的业务处理
/*对要提交的参数进行签名,计算 md5*/
function generate_sign($params, $secret) {
$str = '';
//先将参数以其参数名的字母升序进行排序
ksort($params);
//遍历排序后的参数数组中的每一个 key/value 对
foreach ($params as $k => $v) {
//为 key/value 对生成一个 key=value 格式的字符串,并拼接到签名字符串后面
$str .= "$k=$v";
}
//将签名密钥拼接到签名字符串最后面
$str .= $secret;
return md5($str); // 返回小写 md5
"tag2": "专车,租车",
"url": "http://www.baidu.com"
}
]
}
}
}
2.3. sign 校验参数加密约定
sign 参数值都是以如下参数签名算法获得:
1. 将所有输入参数(包括 GET 和 POST 参数,但排除 sign 参数)格式化为"key=value"键值对格式,
如"k1=v1"、"k2=v2"、 "k3=v3";
2. 将格式化好的参数,按键值升序排序后,拼接在一起,如"k1=v1k2=v2k3=v3";
注:直接拼接,无需&等中间符号,也不要进行 urlencode 编码
3. 在拼接好的字符串末尾拼接上百度分配的 secure_key,其实就是渠道号,假设 secure_key 为 abc,
拼接后的字符串如下:"k1=v1k2=v2k3=v3abc";
4. 对 3 中获取到的字符串算 MD5 签名,签名值即为 sign 参数的值
5. 注意:计算 MD5 签名时,请使用 utf8 编码,并参考加密结果是否与下面示例一致:
“123”的md5:202cb962ac59075b964b07152d234b70
“中国百度”的 md5:0336bf2b3c309d606403f8689b825fcb
#7
好久没来csdn了 ,楼上回复的不错学习了
#8
这个要做个记号!
#9
插眼,学习了