简单token验证php程序小实例
演示简单的token签权,可利用时间戳来控制token过期时间。
在API开发过程会经常使用token来完成请求签权,以防止api接口被恶意调用。
参数说明
请求地址:token.com/api.php?token=xxx&time=xxx&str=xxx&data=xxx
<?php
$key = 'key'; //秘钥 ,非常重要,不参与url传输、秘钥泄露将导致token验证失效
$data['time'] = time();
$data['data'] = 'data';
$data['token']= md5( md5($key) . md5($data['time']) );
// 拼接url
$url = 'domain.com/api.php?' . http_build_query($data);
echo "$url
$key
$data[time]
$data[data]
$data[token]";
//.....
服务器端验证token
<?php
$param = $_GET;
// 验证时间戳
if (!isset($param['time']) || intval($param['time']) <= 1) {
exit('时间戳不正确');
}
// 设置每个token的过期时间为60秒
if (time() - intval($param['time']) > 60) {
exit('请求超时');
}
// 验证token
if (!isset($param['token']) || empty($param['token']) ) {
exit('token不能为空');
}
// 服務器端生成token
$key = 'key'; //秘钥
$time = time();
$server_token= md5( md5($key) . md5($param['time']) );;
if ($server_token !== $param['token']) {
exit('token错误');
}
echo '验证通过';
// 其他业务逻辑
// ...