整个oAuth 最麻烦的的就是构建算法体系,豆瓣在这方面是直接给了一个开源库给我们参考
腾讯的文档有对整个算法的伪码解释,不过,我个人建议,还是下载开源库直接参考,我看了一下,国内的开放平台对签名的算法一般都支持HAMC-SHA1,有些,例如腾讯就只支持HMAC-SHA1,所以,我个人建议,看HMAC-SHA1算法就足够了.我提供的开源库在最困难的签名算法部分都已经进行实现,所以说,可以随便使用.
好了到编码部分:
oAuth 1.0a ,目前大部分的用oAuth 1.0 版本认证开放平台的用的版本
不过,开源库里面用的还是oAuth 1.0 的标准对于callback 没有必要性的要求,所以代码在创建oAuthconsumer时构对callback 没有做强制要求,但是,我们现在的oAuth 1.0 在第一步中是就必须要求这个参数,我测试了一下,在腾讯开放平台中,不加callback参数是肯定访问不了,在豆瓣API中就算第一步没要求加callback 即使加上了也没有关系.
用PHP代码实现 Request Token 的链接
$request_token_url = ‘https://open.t.qq.com/cgi-bin/request_token’;
//从服务商获取的API KEY
$key = ‘xxxxxx’;
$secret = ‘sssss’;
$callback =’null’; //这个在oAuth 1.0标准中不强制要求,也是漏洞的所在,不过这个漏洞的成功率极低.. 在oAuth1.0 a 这个参数是必须的
//生成消费方
$consumer = new OAuthConsumer($key,$secret,$callback);
//生成签名用链接
$req_token_url = OAuthRequest::from_consumer_and_token($consumer,NULL,”GET”,$request_token_url);
//进行链接签名
$req_token_url->sign_request($sig_method,$consumer,NULL);
//打印出我们的链接
echo $req_token_url->to_url();
//进行链接签名
$req_token_url->sign_request($sig_method,$consumer,NULL);
//打印出我们的链接
echo $req_token_url->to_url();?>
这里还算比较简单的,如果是
豆瓣的返回信息:
oauth_token=xxxxxxx&oauth_token_secret=xxxxxxx
腾讯的返回信息:
oauth_token=xxxxxxx&oauth_token_secret=xxxxxxx&oauth_callback_confirmed=true
这里要记住的是oauth_token_secret 记得好好保存,因为在第三步的时候是必须的!
在第二步授权完毕后
在第三步要与授权的oauth_token组成新的消费方.