OAuth Step by Step
最近琢磨OAuth认证方式。OAuth的优点主要在于 用户不需要直接提供用户名密码给第三方应用,就可以让第三方应用访问受限资源; 资源提供方对第三方应用有更细粒度的控制。 在整个OAuth协议里,生成signature的base string是最容易出错的部分。它由HTTP方法名、URL编码的请求路径和请求的参数表组成。 请求的参数表是除去oauth_signature以外的所有参数,按参数名排序,并进行url转义 def to_signature_key(method, url, data): keys = list(data.keys()) keys.sort() encoded = urllib.quote(“&”.join([key+"="+data[key] for key in keys])) return “&”.join([method, urllib.quote(url, safe="~"), encoded]) 有了这个通用的生成signature base string的方法,以后就可以根据OAuth协议规范按步骤进行。 首先获取Request Token。这一步通常使用资源提供方注册的API Key和API Key Secret def request_token_params(consumer_key, consumer_secret, path, method=’GET’): data={} data['oauth_consumer_key']=consumer_key data['oauth_signature_method']=’HMAC-SHA1′ data['oauth_timestamp']=str(int(time.time())) data['oauth_nonce']=”.join([str(random.randint(0,9)) for i in range(10)]) print data msg = to_signature_key(method, path, data) [...]