• 搞清如何使用oAuth 1.0 & 1.0a


    前言

      看这篇博文的朋友,我建议先去了解一下什么是 oAuth 1.0 & 2.0的认证,对于,一些很基本的概念,各大提供该认证的网站应该说的很清楚了,这篇博文是比较细的说下,在oAuth 认证时遇到的问题,以及整个认证客户端api调用的过程

    我说下,目前我知道的提供oAuth 认证的网站(墙外的这里就不提了),大家如果想补充的话,我非常欢迎.

    oAuth 1.0 || 1.0a

    豆瓣

    http://www.douban.com/service/

    腾讯

    http://open.t.qq.com/home/

    360开发者平台

    http://open.app.360.cn/

    网易开放平台

    http://open.t.163.com/

    搜狐开放平台

    http://open.t.sohu.com/

    oAuth 2.0

    新浪微博

    http://open.weibo.com/

    百度链接

    http://dev.baidu.com/connect/

    人人网

    http://dev.renren.com/

    360开发者平台

    http://open.app.360.cn/

      以上是我知道是使用oAuth 认证的的开放平台,特别说一下,oAuth 1.0爆发了 一个漏洞,所以就会有个oAuth 1.0a的版本,至于oAuth 1.0 和 oAuth 2.0 的区别?自己百度一下吧.

      以上网站,我基本都比较过了,oAuth 2.0的操作简化了很多(墙外对这个oAuth2.0 支持得还是不错的),方便了很多,而且新浪那个例子写得很不错,所以,我这篇博文,并不打算说oAuth 2.0,因为,之前我还写了一个jQuery Mobile 的教程,打算做一个项目来贯通所有知识点,我选用的是豆瓣API,由于,豆瓣API提供的PHP框架实在够庞大,而且,我用的免费空间商肯定是不支持那个框架,当然,最近,豆瓣上有人开源了一个PHP的豆瓣API框架,不过,等到我知道的时候,我已经把oAuth 部分的代码写好了,

      这里,我就分享一下我使用oAuth 1.0 api 的经验

    第一步: 获取未授权的Request Token

    整个oAuth 最麻烦的的就是构建算法体系,豆瓣在这方面是直接给了一个开源库给我们参考

    http://code.google.com/p/oauth/

    腾讯的文档有对整个算法的伪码解释,不过,我个人建议,还是下载开源库直接参考,我看了一下,国内的开放平台对签名的算法一般都支持HAMC-SHA1,有些,例如腾讯就只支持HMAC-SHA1,所以,我个人建议,看HMAC-SHA1算法就足够了.我提供的开源库在最困难的签名算法部分都已经进行实现,所以说,可以随便使用.

    好了到编码部分:

    oAuth 1.0a ,目前大部分的用oAuth 1.0 版本认证开放平台的用的版本

    不过,开源库里面用的还是oAuth 1.0 的标准对于callback 没有必要性的要求,所以代码在创建oAuthconsumer时构对callback 没有做强制要求,但是,我们现在的oAuth 1.0 在第一步中是就必须要求这个参数,我测试了一下,在腾讯开放平台中,不加callback参数是肯定访问不了,在豆瓣API中就算第一步没要求加callback 即使加上了也没有关系.

    用PHP代码实现 Request Token 的链接

    <?php require_once 'OAuth.php';
    $request_token_url = ‘https://open.t.qq.com/cgi-bin/request_token’;
    //从服务商获取的API KEY
    $key = ‘xxxxxx’;
    $secret = ‘sssss’;
    $callback =’null’; //这个在oAuth 1.0标准中不强制要求,也是漏洞的所在,不过这个漏洞的成功率极低.. 在oAuth1.0 a 这个参数是必须的
    //生成消费方
    $consumer = new OAuthConsumer($key,$secret,$callback);
    //生成签名用链接
    $req_token_url = OAuthRequest::from_consumer_and_token($consumer,NULL,”GET”,$request_token_url);
    //进行链接签名
    $req_token_url->sign_request($sig_method,$consumer,NULL);
    //打印出我们的链接
    echo $req_token_url->to_url();
    //进行链接签名
    $req_token_url->sign_request($sig_method,$consumer,NULL);
    //打印出我们的链接
    echo $req_token_url->to_url();?>

    这里还算比较简单的,如果是

    豆瓣的返回信息:

    oauth_token=xxxxxxx&oauth_token_secret=xxxxxxx

    腾讯的返回信息:

    oauth_token=xxxxxxx&oauth_token_secret=xxxxxxx&oauth_callback_confirmed=true

    这里要记住的是oauth_token_secret 记得好好保存,因为在第三步的时候是必须的!

    在第二步授权完毕后

    在第三步要与授权的oauth_token组成新的消费方.

    第二步:请求用户授权Request Token

    这一步比较简单…上PHP代码

    <?php
    
        $authorize_url = “https://open.t.qq.com/cgi-bin/authorize”;
    
      $oauth_token =’上一步中获取的oauth_token’;
    
      //以下是可选参数,成功授权后带参数跳转到相应页面,具体参见服务商
    
    //豆瓣>
    
      $callback = ‘www.yourapp.com’;
    
    //腾讯的
    
    $wap =’’ 
    
      //参数如有特殊字符需要urlEncode ,带链接的请求这步是必须的
    
    $params = array();
    
     $params[‘oauth_token’]=$oauth_token; 
    
    $params[‘callback’] = $callback; //根据自己的需要更改.
    
    //生成用户授权链接
    
    $url = $authorize_url.’?”.http_build_query($params);
    
     echo $url; 
    ?>

    拷到浏览器就会跳转到授权页面

    豆瓣的话,就是授权成功了

    腾讯的话,还带了验证码,这个要认真阅读文档!!!!

    第三步:使用授权后的Request Token换取Access Token

    授权成功以后,如果是oAuth 1.0 就十分方便..直接用第一步获得的oauth_token 和 oauth_token_secret 组成一个oAuthToken 添加到第一步的那个null参数里面就可以取得那个用于获取access token 的链接

    如果是用豆瓣的话你只需这样:

    <?php
    
      require_once 'OAuth.php';
    
    $access_token_url = ‘http://www.douban.com/service/auth/access_token’;
    
    //从服务商获取的API KEY
    
    $key = ‘xxxxxx’;
    
    $secret = ‘sssss’;
    
      
    
     // 第一步中获得的两个参数,确认在第二步中$oauth 获得授权以后才能够访问成功
    
      $oauth = ‘xxxxx’;
    
      $oauth_secret = ‘xxx’;
    
      //生成 访问用的token
    
    $token = new OAuthToken($oauth,$oauth_secret);
    
      //生成消费方
    $consumer = new OAuthConsumer($key,$secret);
    //生成签名用链接$req_token_url = OAuthRequest::from_consumer_and_token($consumer,$token,”GET”,$request_token_url);
    //进行链接签名
    $req_token_url->sign_request($sig_method,$consumer,$token);
    //打印出我们的链接
    echo $req_token_url->to_url();
    ?>

    拷到浏览器中,你就获取到我们用于访问用户资源的两个参数oauth_token 和 oauth_token_secret,豆瓣的话还会返回用户的ID.

    腾讯的话,记得在授权的时候加上验证码,一样可以获得

    对于Access Token 的期限.

    一般而言,access token 的实效一般是用户取消授权才会失效,不过,听说也有有时效的,这个,我得去找找是哪家

    总结

      其实,这个认证各大服务商都提供了相应的SDK 让我们非常简单的使用他们提供的服务,只要填上APIKEY 剩下的就是客户授权的问题,要不是,豆瓣提供的PHP的 SDK,我准备用的空间商无法支持,我也懒得搞清楚是怎么认证的.oAuth 1.0 应该还能用很长一段时间,不过,oAuth 2.0 才是未来(墙外的基本都用 2.0 版本),听说,oAuth 2.0 在使用上简单了很多,看了一下新浪的的确如此,早知道,就不用豆瓣的了…哎….晚些时候,补上一个支持oAuth 1.0&1.0a 的demo,有或者直接看服务商的…


    作者:游戏阿柴
    出处:http://www.cnblogs.com/youxilua
    本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
    微博联系:新浪微博
    用支付宝赞助博主:http://me.alipay.com/youxilua

  • 相关阅读:
    贴一段微博上的小知识
    关于编译Qt以及驱动的一点总结吧
    一些服务器客户端的c例子
    android中DatePicker和TimePicker的使用
    Python标准库string模块《未完待续》
    Qt: SQL Programming
    和一个坑爹的项目组的经历
    linux一些杂项整理
    Qt中的QTableWidget
    Linux c学习进程基础学习
  • 原文地址:https://www.cnblogs.com/youxilua/p/2306790.html
Copyright © 2020-2023  润新知