转自:http://tigerszdf.blog.163.com/blog/static/45955133201072662354812/
最近弄了一个项目,被这个Oauth认证被绕晕了,好不容易跑通了逻辑,下面开始好好分析一下它的认证过程。他的认证过程简单来说可以分成3部 分:
- 向服务器发请求,索要一个没有授权的token和它的密钥.
- 拿着这个没有授权的token去网站上给用户 授权这个token,拿到一个权限核对码(verifier)
- 拿着这个核对码,去请求一个许可的token和它的密钥.
- 这 样我们就可以访问需要授权的信息了.
虽然说起来容易,而且还有Google Code 上的Oauth Api,但是经常被那些参数弄晕,导致不能继续下去,所以首先要记住一点:XXX出现在 URL中,XXX_secret就会用来做签名.
下面说说1-4步中的请求分别需要动用哪些参数。最开始,你手上会有两个 参数,一个是consumerKey,另外一个是consumerSecret。
- 请求未授权的token和它的密钥(取名分别为t1,ts1).这里关键参数 有:oauth_consumer_key=consumerKey.只用consumerSecret来签名.
- 给未授权token拿给授权,获得 token(其实和t1是一个值)和核对码(verifier,取名为v2).这里关键参数 有:oauth_token=t1,oauth_callback=callbackURL(这个用于接受返回的值的地址,它有可能会在服务器端做一次跳转).这一步不需要 签名.
- 请求许可token和它的密钥(取名为a3和as3).这里关键参数有:oauth_consumer_key=consumerKey,oauth_token=t1,oauth_verifier=v2.用consumerSecret和ts1做签名.
- 访问许可的资源.这里关键参数 有:oauth_consumer_key=consumerKey,oauth_token=a3.用consumerSecret和as3做签名.
下面用sina微博的oauth认证作为事例,分析每一步的结果:
1.请求token(get):
- url:http://api.t.sina.com.cn/oauth/request_token?oauth_signature_method=HMAC-SHA1&oauth_consumer_key=consumerKey&oauth_timestamp=&oauth_nonce=&oauth_signature=[consumerSecret]
- 返回:oauth_token=t1&oauth_token_secret=ts1
2.授权token,注意,这一步会跳到sina登录页面上(get):
- url:http://api.t.sina.com.cn/oauth/authorize?oauth_token=t1&oauth_callback=callbackURL
- 返 回:callbackURL?oauth_token=t1&oauth_verifier=v2
3.获取最终的授权token(post):
- url:http://api.t.sina.com.cn/oauth/access_token
- post data:oauth_consumer_key=consumerKey&oauth_token=t1&oauth_signature_method=HMAC-SHA1&oauth_verifier=v2&oauth_timestamp=&oauth_nonce=&oauth_signature=[consumerSecret+ts1]
- 返回:oauth_token=a3&oauth_token_secret=as3
4.去请求受限数据[个人信息](get):
- url:http://api.t.sina.com.cn/account/verify_credentials.json?oauth_signature_method=HMAC-SHA1&oauth_consumer_key=consumerKey&oauth_token=a3&oauth_timestamp=&oauth_nonce=&oauth_signature=[consumerSecret+as3]
至此,就完成登录并可以访问受限资源啦!