-
Notifications
You must be signed in to change notification settings - Fork 70
Oauthsignature
superisaac edited this page Jan 4, 2012
·
2 revisions
每次对饭否的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