IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

新浪微博OAuth认证流程分析

记事本 2010-11-17 19:11:27 累计浏览 5,023 次
本机暂存

对新浪微博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. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. 微信扫码登录网页实现原理 (累计阅读 17,467)
  2. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  4. libcurl的使用总结(二) (累计阅读 15,083)
  5. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,302)
  6. HTTP协议Keep-Alive模式详解 (累计阅读 12,104)
  7. 你必须了解的Session的本质 (累计阅读 11,441)
  8. 初探单点登录 SSO (累计阅读 10,618)
  9. curl 命令使用cookie (累计阅读 10,016)
  10. Hello! 404 (累计阅读 9,385)