Oauthsignature

superisaac edited this page Jan 4, 2012 · 2 revisions
Clone this wiki locally

OAuth签名方法

每次对饭否的OAuth请求都需要在应用端和饭否端做签名,只有两方的签名完全一样,才能保证请求的合法性。

签名的基本伪代码过程如

base_string = httpMethod + '&' + url_encode(base_url) + '&' + sorted(querysting.items()).join('&')
sig = signature(base_string) #得到签名

base_string的构成由如下几部分组成

参数 意义
httpMethod 本请求的HTTP Method, GET或者POST
url_encode(base_url) 访问的URL, 如 http%3A%2F%2Fapi.fanfou.com%2Fstatuses%2Fpublic_timeline.json
sorted_query_items 将参与签名的请求参数按照名字排序,保持形式k=v

参与请求的参数规则如下, basestring的构成比较重要,很多应用遇到的问题也来源于此.

  • 如果请求存在Authorization的Header并且以OAuth开头,则其随后的参数, 所有的名字以oauth_ 和xauth_(用于XAuth)开头的参数都参与签名
  • 如果请求是GET, 则QueryString中所有的参数都参与签名
  • 如果请求是POST并且,Content-Type是application/x-www-form-urlencoded, 则所有的POST参数需要参加签名
  • 其他的POST请求,参数都不参加签名,包括multipart/form-data