2011-05-28 148 views
1

我使用OAuth with Federated Login (Hybrid Protocol)來允許我的用戶使用openID登錄一次(這很好用),並且同時使用Google Data API進行身份驗證。使用OpenID + OAuth獲取訪問令牌和祕密(谷歌)

Zend_GData庫讓我頭痛,所以在這裏的人的建議,我切換到LightOpenID

中的OpenID部分的偉大工程,並感謝this提示我能添加的OAuth extenstion和收到這樣的迴應:

http://www.example.com/checkauth 
?openid.ns=http://specs.openid.net/auth/2.0 
&openid.mode=id_res 
&openid.op_endpoint=https://www.google.com/accounts/o8/ud 
&openid.response_nonce=2009-01-17T00:11:20ZlJAgbeXUfSSSEA 
&openid.return_to=http://www.example.com/checkauth 
&openid.assoc_handle=AOQobUeYs1o3pBTDPsLFdA9AcGKlH 
&openid.signed=op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle,ns.ext2,ext2.consumer,ext2.scope,ext2.request_token 
&openid.sig=oPvRr++f6%2ul/2ah2nOTg= 
&openid.identity=https://www.google.com/accounts/o8/id/id=AItOawl27F2M92ry4jTdjiVx06tuFNA 
&openid.claimed_id=https://www.google.com/accounts/o8/id/id=AItOawl27F2M92ry4jTdjiVx06tuFNA 
&openid.ns.oauth=http://specs.openid.net/extensions/oauth/1.0 
&openid.oauth.scope=http://docs.google.com/feeds/+http://spreadsheets.google.com/feeds/+http://sandbox.gmodules.com/api/ 
&openid.oauth.request_token=1/fVr0jVubFA83GjYUA 

根據該文件,openid.oauth.request_token是授權請求令牌,所以看起來我不需要做OAuthAuthorizeToken請求。目前爲止都很好,但現在我需要將此請求令牌交換爲訪問令牌和令牌密鑰。

因爲我不知道如何生成OAuth隨機數和簽名,所以我使用了PHP的OAuthSimple庫。但問題是,代碼需要看起來像這樣:

// Build the request-URL... 
$result = $oauth->sign(array(
    'path' => 'https://www.google.com/accounts/OAuthGetAccessToken', 
    'parameters' => array(
     'oauth_verifier' => $_GET['oauth_verifier'], 
     'oauth_token' => $_GET['oauth_token']), 
    'signatures' => $signatures)); 

它需要一個oauth_verifier值,你會與一個正常的OAuth請求請求令牌收到一起。我不確定是否OAuthSimple庫在嘗試省略時遇到錯誤,或者它是Google的要求,但不起作用。

那麼,有人可以發現我在這裏做錯了嗎?

回答

0

沒有什麼錯。實際上,當您執行混合進程時,驗證者不會發送,只是因爲您不需要它。

所以在你的代碼中,只要將驗證器設置爲NULL,並且它應該可以正常工作,只要其他地方沒有問題。

相關問題