OAuth协议分析一

时间:2010-10-27 11:41 作者:shaoyun

这些分析基于OAuth协议和Sina的开发文档,参考PHP、C#的SDK,用Fiddler提交测试得来

第一部分:获取的未授权的Request Token和对应的Request Token Secret

提交地址:

http://api.t.sina.com.cn/oauth/request_token

提交方式:GET

参数列表:

oauth_consumer_key 我们申请的APIkey
oauth_nonce 随机值,这里根据时间随机生成32位的md5值
oauth_signature 参数签名
oauth_signature_method 签名算法
oauth_timestamp 获取的当前时间戳整型值
oauth_version OAuth协议版本

待签名的字符串如下
GET&http%3A%2F%2Fapi.t.sina.com.cn%2Foauth%2Frequest_token&oauth_consumer_key%3D888888888%26oauth_nonce%3D08e59bdb879d2f4b96eb20158d7a5b47%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1288149739%26oauth_version%3D1.0a

参数以此分解为,%3D为=,%26为&

GET
http://api.t.sina.com.cn/oauth/request_token
oauth_consumer_key=888888888
oauth_nonce=08e59bdb879d2f4b96eb20158d7a5b47
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1288149739
oauth_version=1.0a

第一个参数和第二参数之间,第二个参数和第三个参数之间用&连接,第三个参数往后都进行urlencode,这就是要签名的字符串

签名算法,这里我们用HMAC-SHA1,key为App Secret,申请的那个

$key='e547036cd665c647f4561ede6820fde0&';
base64_encode(hash_hmac('sha1', $base_string, $key, true));

生成的签名
oauth_signature=urlencode('5QkdZySrnlASeEOCcXtm7HspdyI=');

最终get的地址为
http://api.t.sina.com.cn/oauth/request_token?oauth_consumer_key=888888888&oauth_nonce=08e59bdb879d2f4b96eb20158d7a5b47&oauth_signature=5QkdZySrnlASeEOCcXtm7HspdyI%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1288149739&oauth_version=1.0a

成功提交后服务器返回的字符串如下
oauth_token=78ad5974c2b5c3a9de0fca3d1698470f&oauth_token_secret=7e3c4cce0585101bc4b931136ba7ed90

这个就是获取的未授权的Request Token和对应的Request Token Secret

 

这里只是分析,与平台语言无关,具体实现根据情况,这才是认证的第一步,后面的与这类似,有时间再写。

posted @ 2010-10-27 14:29  shaoyun  阅读(3156)  评论(6编辑  收藏  举报