OAuth / Twitteroauth库和授权标头

时间:2013-04-25 20:09:46

标签: php curl oauth twitter twitter-oauth

我试图通过试验twitteroauth php库来更好地理解OAuth。

我的理解是,对OAuth进行身份验证的方法是在使用cUrl时使用“授权”标头。但是,在检查twitteroauth库的源代码时,我可以看到为发布请求设置了标题:

 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

1 个答案:

答案 0 :(得分:0)

客户端可以添加HTTP Expect标头来告诉服务器“嘿,我希望你以某种方式行事”。出于某种原因,Twitter的实施希望你什么都不期待。我用自己的本土实现遇到了这个问题。我不确定为什么Twitter想要这个标题。

您可以在POST变量或标题中显示您的凭据和签名。只要设置了正确的变量(oauth_consumer_key,oauth_nonce,oauth_signature,oauth_signature_method,oauth_timestamp和oauth_token),两者都会起作用。

我发现将Authorization标头设置得更清晰,因为它不依赖于请求方法(GET,POST,PUT等)。但Twitter处理这两种情况都很好。如果这就是他们在库中实现它的方式,那就这样吧。