现在的位置: 首页 > 综合 > 正文

新浪微博的Oauth认证过程

2013年10月22日 ⁄ 综合 ⁄ 共 1830字 ⁄ 字号 评论关闭

转自:http://tigerszdf.blog.163.com/blog/static/45955133201072662354812/

最近弄了一个项目,被这个Oauth认证被绕晕了,好不容易跑通了逻辑,下面开始好好分析一下它的认证过程。他的认证过程简单来说可以分成3部 分:

  1. 向服务器发请求,索要一个没有授权的token和它的密钥.
  2. 拿着这个没有授权的token去网站上给用户 授权这个token,拿到一个权限核对码(verifier)
  3. 拿着这个核对码,去请求一个许可的token和它的密钥.
  4. 这 样我们就可以访问需要授权的信息了.

虽然说起来容易,而且还有Google Code 上的Oauth Api,但是经常被那些参数弄晕,导致不能继续下去,所以首先要记住一点:XXX出现在 URL中,XXX_secret就会用来做签名.

下面说说1-4步中的请求分别需要动用哪些参数。最开始,你手上会有两个 参数,一个是consumerKey,另外一个是consumerSecret

  1. 请求未授权的token和它的密钥(取名分别为t1,ts1).这里关键参数 有:oauth_consumer_key=consumerKey.只用consumerSecret来签名.
  2. 给未授权token拿给授权,获得 token(其实和t1是一个值)和核对码(verifier,取名为v2).这里关键参数 有:oauth_token=t1,oauth_callback=callbackURL(这个用于接受返回的值的地址,它有可能会在服务器端做一次跳转).这一步不需要 签名.
  3. 请求许可token和它的密钥(取名为a3as3).这里关键参数有:oauth_consumer_key=consumerKey,oauth_token=t1,oauth_verifier=v2.用consumerSecretts1做签名.
  4. 访问许可的资源.这里关键参数 有:oauth_consumer_key=consumerKey,oauth_token=a3.用consumerSecretas3做签名.

下面用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]

至此,就完成登录并可以访问受限资源啦!

【上篇】
【下篇】

抱歉!评论已关闭.