IT技术博客大学习 共学习 共进步

新浪微博OAuth认证流程分析

记事本 2010-11-17 19:11:27 浏览 4,922 次

对新浪微博OAuth认证的一点备忘,不求别人能看明白,只希望自己以后还能看懂……


第一步,通过已知的consumer key和consumer secret获取request token以及request token secret。

以下是代码片段:
private function getRequestToken(){
    $output = $this->OAuthGet(self::$REQUEST_TOKEN, NULL);
    $token = OAuthUtil::parse_parameters($output);
    return new OAuthToken($token[’oauth_token’], $token[’oauth_token_secret’]);
}
 
这里的$REQUEST_TOKEN为http://api.t.sina.com.cn/oauth/request_token,这个方法不用提供给外部调用,所以可以声明为私有方法。

第二步,获取第一步传回的request token,然后引导用户前往新浪认证页面,认证成功后会返回oauth_verifier。

以下是代码片段:
public function GetAuthorization() {
 $token = $this->getRequestToken();
 $result->Url = self::$AUTHORIZE . "?oauth_token={$token->key}";
 $result->Token = $token;
 return $result;
}
 
第二步中的$AUTHORIZE为http://api.t.sina.com.cn/oauth/authorize,即认证页面。其中返回的$result->Url加上oauth_callback参数用来做302跳转,而$result->Token要保存起来(可以存到session中)以便在第三步使用。例如:
以下是代码片段:
$info = $oauth->GetAuthorization();
$_SESSION[’request_token’] = $info->Token;
header("Location: {$info->Url}&oauth_callback=" . urlencode(CALLBACK_URL . ’?ret=’ . $_SERVER[’REQUEST_URI’]));

第三步,用户在第二步中http://api.t.sina.com.cn/oauth/authorize认证成功之后,新浪会带上oauth_verifier参数再跳转一次,地址是由上一步oauth_callback参数指定的。这一步会连同第一步返回的request token和request token secret以及第二步返回的oauth_verifier做最后一次认证,通过之后返回access token和access token secret,这对密钥可以用来访问受限的资源,认证流程到此结束。

以下是代码片段:
public function GetAccessToken($token, $verifier) {
 $output = $this->OAuthGet(self::$ACCESS_TOKEN . "?oauth_verifier=$verifier", $token);
 $token = OAuthUtil::parse_parameters($output);
 return new OAuthToken($token[’oauth_token’], $token[’oauth_token_secret’]);
}
 

第三步认证其实是在上一步oauth_callback参数指定的地址中进行的,其中$ACCESS_TOKEN为http://api.t.sina.com.cn/oauth/access_token。

建议继续学习

  1. 基于PECL OAuth打造微博应用 (阅读 5,102)
  2. 深入理解OAuth与豆瓣OAuth test (阅读 4,945)
  3. PHP for Twitter OAuth 教学演示 (阅读 4,642)
  4. 在sae中利用SaeFetchurl进行豆瓣的OAuth授权 (阅读 4,524)
  5. OAuth那些事儿 (阅读 4,164)
  6. OAuth 1.0a与1.0协议的改进… (阅读 3,802)
  7. 【社会化设计】自我(self)部分――授权 (阅读 3,642)
  8. 【社会化设计】自我(self)部分――密码反面模式(the Password Anti-pattern) (阅读 3,622)
  9. 新浪微博 Android SDK中OAuth2.0隐式授权部分的一个代码逻辑问题 (阅读 3,442)
  10. 简述 OAuth 2.0 的运作流程 (阅读 3,321)