Google OAuth 簡單入門與使用


MeetTea需要能夠通過Google API來獲取用戶的用戶名和頭像,效果就像google.org.cn的排隊系統。

那么如何實現呢? 通過幾天的學習、研究,下載google的源碼,最后了解了原理並制作了一個簡單的DEMO。

效果見附件,只有一個簡單的test.php,需要自己去申請CONSUMER_KEY和CONSUMER_SECRET,不過申請步驟簡單。

申請地址:herehttps://www.google.com/accounts/ManageDomains 

目前僅使用HMAC-SHA1算法。此外可以參考這個http://googlecodesamples.com/oauth_playground/ 有源碼,是PHP的。

詳細的技術文檔在這里 http://code.google.com/apis/accounts/docs/OAuth_ref.html

OAuth驗證第一步:Get a Request Token

這個Request Token是請求一個令牌,來允許程序接入google的服務。

具體做法是發送一個HTTP GET請求到https://www.google.com/accounts/OAuthGetRequestToken

並且在HTTP頭里有一個Authorization字段,字段里的內容是OAuth開頭,加一個空格,然后是每個參數join一個“,”和空格。

此外google的OAuth還有一個SCOPE參數,這個不是標准OAuth里的。

最后注意端口是443,不然會收到一個302;如果程序有問題會收到一個400。

如果是200,則在返回的HTTP BODY里取得$oauth_token,$oauth_token_secret

保存好這兩個值,下兩步要用到。

 

第二步是用戶操作部分,需要用戶授權應用訪問GOOGLE相關服務。也就是redirect到 www.google.com/accounts/OAuthAuthorizeToken?oauth_token=剛才的KEY

 獲取用戶的頭像、用戶名的scope是http://www-opensocial.googleusercontent.com/api/people/@me

用戶允許Access后就會跳轉回剛才的頁面,並且在URL參數里多了一個參數。

 

第三步是憑剛才URL里驗證的參數發送一個GET請求到https://www.google.com/accounts/OAuthGetAccessToken

獲取接入GOOGLE服務的權限,HEADER里仍舊要包含Authorization字段。

得到KEY和SECRET后替換剛才一開始的KEY和SECRET,發送GET請求到 獲取用戶的頭像、用戶名的scope,就可以保存下來,用戶也無需注冊了。

 

當然,GOOGLE龐大的API還可以幫助你得到用戶朋友的EMAIL地址之類的,就看網站的需要了,潛力無限。

豆瓣用的也是OAuth。

==============2009/11/25 update=====================

豆瓣的算法和google的略有不同,主要是在http header里的數據不用rawurlencode

請搜索test.php里

PHP代碼
  1. public function to_header($realm='') {/*{{{*/  
  2.   $out ='Authorization: OAuth realm="' . $realm . '"';   
  3.   $total = array();   
  4.      
  5.   /*  
  6.   $sig = $this->parameters['oauth_signature'];    
  7.   unset($this->parameters['oauth_signature']);   
  8.   uksort($this->parameters, 'strnatcmp');    
  9.   $this->parameters['oauth_signature'] = $sig;  
  10.   */  
  11.      
  12.   foreach ($this->parameters as $k => $v) {   
  13.     if (substr($k, 0, 5) != "oauth"continue;   
  14.     //$out .= OAuthUtil::urlencodeRFC3986($k) . '="' . OAuthUtil::urlencodeRFC3986($v) . '", ';   
  15.  $out .= ',' . $k . '="' . $v . '"';   
  16.     $str = $k . '=' . $v;   
  17.     if ($this->string == null) {   
  18.       $this->string = $str;   
  19.     } else {   
  20.       $this->string .= '&' . $str;   
  21.     }   
  22.   }  

此外把params數組里的scope清理掉,豆瓣不需要。詳細可以參考http://www.douban.com/service/apidoc/auth

其他基本是大同小異。豆瓣有PHP版的OAuth示例,可惜是做成ZEND FRAMEWORK的。我需要的是單個文件以便拆解到我的框架中。

接下來研究windows live的API和renren.com的API。

本文采用Creative Commons協議,復制本文需遵守三點:1、保留署名(鏈接);2、非商業性使用;3、再次創作的作品必須以相同的許可協議發布。法律顧問:庄毅雄律師


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM