新浪微博应用开发之一:授权机制介绍

题记:国庆期间没有出去玩,也没有回家,只有蜗居在家,闲来无事,研究了下新浪微博人人网的开发平台。特把研究成果及其经验写成博客,分享给大家。首先先说说我开发的新浪微博应用:微博祝福,以及人人网应用:人人祝福墙。这两个应用都是根据爱墙程序修改而成,并且采用了我的jquery插件wBox

今天主要讲一讲新浪微博应用开发的授权机制问题,因为新浪最近跟CSND合作举办一个APP开发大赛,所以今天想说下新浪微博的应用开发。新浪微博是采用两种授权方法:一种是HTTP普通验证(Basic Authentication)方式,另外一种是OAuth,前面一种是最直接的方法,用户输入账号密码登陆,而第三方网站需要记录用户的账号密码下次才能认证成功,不然每次都要输密码很麻烦,并且对于用户来说很不安全。第二种OAuth是比较安全的,用户需要跳到新浪官方输入账号密码,然后通过三步来换取Access Token,说起来比较麻烦,不过得到了这个Token之后就可以请求到新浪微博的API了,用户还可以随时通过新浪微博取消这个认证授权。

HTTP普通验证

最简单的认证方式,断桥残雪之前写的Follow5 API类就是使用这样的方法,其原理就是使用curl一个URL来请求API接口,已获得开放的数据。
关于HTTP普通验证的方法,大家可以参考我之前写的一个Follow5 API PHP类,关于curl的详细操作,大家可以看这篇文章《cURL常用的几个PHP函数

OAuth认证方法

OAuth 认证估计是新浪微博继承了twitter的开放平台方法,也是比较安全的。关于Oauth的介绍,大家可以移步: OAUTH协议简介
我们主要说一下这三个步骤的实现:

  1. 获取未授权的Request Token
  2. 获取用户授权的Request Token
  3. 用授权的Request Token换取Access Token
    其实在新浪微博的PHP SDK中就已经有很详细的代码了。
    首先是假如用户没有登录新浪微博,那么我们要在页面生成之前产生一个未授权的Request Token,也就是下面的代码:

$o = new WeiboOAuth( WB_AKEY , WB_SKEY  );//填写自己的新浪微博App  key 和App Secret
$keys = $o->getRequestToken();
//下面加上了一个callback返回地址
$aurl = $o->getAuthorizeURL( $keys['oauth_token'] ,false , $_SERVER['SCRIPT_URI'].'/callback.php');

通过上面的代码就可以得到一个去新浪微博登录的地址,把得到的Request Token 记录到Session中,用户通过这个URL登录成功后会返回到callback.php,把参数传给它,做进一步处理。
第二部中需要获取Access Token:


$o = new WeiboOAuth( WB_AKEY , WB_SKEY , $_SESSION['keys']['oauth_token'] , $_SESSION['keys']['oauth_token_secret']  );
$last_key = $o->getAccessToken(  $_REQUEST['oauth_verifier'] ) ;

这一步,通过callback.php获取的oauth_verifier ,去请求Access Token,进行认证,认证通过之后,我们就可以凭Access Token来操作API接口了。我们可以把oauth_token和oauth_token_secret保存下来,下次用户就不用再次授权就可以直接进行API操作了,这样就实现了自己的网站与新浪微博互连。当然用户可以随时取消授权,或者重新授权使用。

最后宣传下我的新浪微博应用:微博祝福 http://js8.in/love,大家快去给自己的粉丝,关注者送祝福啊,TA会新浪微博的提醒中,第一时间收到你的祝福的!