php版Token授权简单示例
前边分享了 又拍云php版Token授权防盗链整理 感觉可以用一用,今天分享一个示例,利用Token授权来实现加解密。
/** 生成签名授权 * * @param $str,签名对象 * @param $key,密钥 * @param $expiry,有效期,单位秒 **/ function yang_encode($str, $key='', $expiry=''){ // 过期时间: 当前Unix秒数+有效期 $ctime = time() + $expiry; // 生成签名授权码: 将三个参数以&符号拼接,进行md5加密并取加密值的末8位,再与$ctime拼接 $sign_str = substr(md5($str.'&'.$key.'&'.$ctime), -8).$ctime; return $sign_str; } // 示例 //echo yang_encode('aabbcc', 'UsG5kw67RB', '3600'); /** 解密签名授权 * * @param $sign_str,签名授权码 * @param $str,签名对象 * @param $key,密钥 * @param $expiry,有效期,单位秒 **/ function yang_decode($sign_str, $str, $key='', $expiry=''){ // 验证授权码完整性(18个字符) if( strlen($sign_str) != 18){ return "签名授权码不完整,验证失败! "; exit; } // 拆分字符串 $sign_str $str1 = substr($sign_str, 0, 8); // 签名授权 $str2 = substr($sign_str, 8, 10); // 过期时间 // 构造签名验证字符串 $sign = substr(md5($str.'&'.$key.'&'.$str2), -8); $de = ( ($str2-time())>0 && ($str2-time())<$expiry && ($sign==$str1) ) ? 1 : 0; return $de; } // 示例 //echo yang_decode('ae6648711483724340', 'aabbcc', 'UsG5kw67RB', '3600');
这个签名授权函数,可以用在 URL 传参中,比如授权获取用户资料:
http://aaa.com/get.php?uid=1&sign=ae6648711483724340
这样可以利用参数 sign 判断请求是否已授权且在有效期内,如果条件都满足,再输出数据,防止恶意提交!
比如QQ客户端上点击邮箱小图标,跳转到浏览器后自动登录邮箱,就用到了 clientkey 参数:
http://ptlogin2.qq.com/jump?ptlang=2052&clientuin=QQ号码&clientkey=112位授权码&u1=跳转网址
最近有个PC客户端与WEB端同步登录的项目就用到了这个方案,有时间将这个 url 通过 get 传参添加token授权的用法拓展一下。
如果各位有其他更优的方案,欢迎交流!