2013-04-25 80 views
0

我想通過試用twitteroauth php庫來更好地理解OAuth。OAuth/Twitteroauth庫和授權標題

我的理解是,通過OAuth進行身份驗證的方式是在使用cUrl時使用「授權」標頭。然而,檢查了twitteroauth的庫源,我可以看到,頭被設置爲使POST請求:

curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); 

而且實際上是在設定應在「授權」頭設置的參數帖子正文代替行:

curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 

這樣做的原因是什麼?當Twitter的API準則是指定的標題下面的實現:

POST /1/statuses/update.json?include_entities=true HTTP/1.1 
Accept: */* 
Connection: close 
User-Agent: OAuth gem v0.4.4 
Content-Type: application/x-www-form-urlencoded 
Authorization: 
     OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", 
       oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", 
       oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", 
       oauth_signature_method="HMAC-SHA1", 
       oauth_timestamp="1318622958", 
       oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", 
       oauth_version="1.0" 
Content-Length: 76 
Host: api.twitter.com 

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21 

回答

0

客戶可以添加HTTP標頭期待告訴服務器「哎,我希望你能以某種方式行事」。出於某種原因,Twitter的實施要求您不要期待。我用自己的本土實現來解決這個問題。我不確定爲什麼Twitter想要這個標題。

您可以在POST變量或標題中顯示您的憑據和簽名。只要設置了正確的變量(oauth_consumer_key,oauth_nonce,oauth_signature,oauth_signature_method,oauth_timestamp和oauth_token),兩者都將工作。

我發現設置授權標頭更清潔,因爲它不依賴於請求方法(GET,POST,PUT等)。但Twitter處理這兩種情況都很好。如果這就是他們如何在圖書館實施它,那就這樣吧。