对新浪微博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。