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