网易天涯论坛——OAuth

这几天在做和讯天涯论坛客户端,由于此前接触的差不多为Socket编程,而对此Http协议编程还设有许多盲区,所以费了成百上千功夫,好了、闲话少说,统计一下。

一、OAuth概述
为了利用乐乎博客园开放平台提供的API(应用程序接口),你需要先挂号一个运用。大家会给每一个行使一个专属的App
Key和App
Secret。Key跟Secret的使用办法跟其余部分合计中的公钥私钥的方案相接近,你可以利用你所熟稔的编程语言将key和secret结合,为您发出的各种请求添加签名,以此来向今日头条博客园开放平台注明自己身份的合法性。

二、OAuth认证中央流程

ACCESS 1

ACCESS 2

OAuth提供二种注明方法:query-string和http
headers。我们引进应用http header举行认证。

内部需要的几个URL

public const string
HTTP_REQUEST_TOKEN = “http://api.t.sina.com.cn/oauth/request\_token“;
public const string HTTP_AUTHORIZE = “http://api.t.sina.com.cn/oauth/authorize“;
public const string HTTP_ACCESS_TOKEN = “http://api.t.sina.com.cn/oauth/access\_token“;

public const string
HTTP_VERIFY = “http://api.t.sina.com.cn/account/verify\_credentials.json“;

 

三、请求签名

不无的OAuth请求使用同一的算法来扭转(signature
base string)签名字符基串和签署。

base
string是把http方法名,请求URL以及呼吁参数用&字符连起来后做URL
Encode编码。具体来讲,base
string由http方法名,之后是&,接着是过url编码(url-encoded)之后的url和做客路径及&。接下来,把具备的央求参数包括POST方法体中的参数,经过排序(按参数名展开文本排序,假如参数名有双重则再安参数值举办重新项目排序),使用%3D替代=号,并且使用%26看作每个参数之间的分隔符,拼接成一个字符串。

其一算法可以简简单单表示为:

httpMethod + "&" +
  url_encode(  base_uri ) + "&" +
  sorted_query_params.each  { | k, v |
      url_encode ( k ) + "%3D" +
      url_encode ( v )
  }.join("%26")

无论生成何种OAuth1.0请求,生成BASE
STRING的规则始终不变。

天涯论坛和讯要求具备的OAuth请求都接纳HMAC-SHA1算法生成签名。

 

注意:
1)用于转移“签名字符基串”的参数是要经过排序的。
2)用于转移“签名字符基串”的参数是伸手中蕴含所有参数[概括Get、Post请求的所有参数,不过有一个特例:即利用Post请求
以 “multipart/form-data”
格式传输文件时、只有以oauth_初始的参数才能参预生成“签名字符基串”]
3)每一个涉足生成“签名字符基串”的参数值都要透过URL Encode编码。

OAuth提供二种注明方法:query-string和http
headers。

要是是Querty-String认证大致的伸手格式如下:
……&oauth_signature=UrlEncoHMAC-SHA1算法对“签名字符基串”举办加密生成的签名]);

若果是Http
headers认证,则需要在http协议头中投入一个键值对:
“键”为 “Authorization”
“值”为   “OAuth “+【所有参数【包括oauth_signature这些参数、生成签名字符基串需要参数排序,但生成这么些字符串不需要参数排序】使用
=分割 键与值,使用“逗号加一个空格”作为参数间的相间符
】,生成后的款型大体为:”OAuth oauth_consumer_key=\”{0}\”,
oauth_signature_method=\”HMAC-SHA1\”,oauth_timestamp=\”{1}\”,
oauth_nonce=\”{2}\”, oauth_version=\”1.0\”,
oauth_token=\ACCESS,”{3}\”,oauth_signature=\”{4}\””

有关更多的和讯天涯论坛OAuth请参见:http://open.weibo.com/wiki/Oauth

相关文章