2012-06-17 47 views
1

我跟着教程https://dev.twitter.com/docs/auth/implementing-sign-twitter在我的主頁上使用OAuth。一切正常,在最後一步之後,我有一個oauth_token(將其轉換爲訪問令牌後)和一個oauth_token_secret。現在我想在twitter上發佈一個新的狀態。所以我做了這個頁面上的所有內容https://dev.twitter.com/docs/auth/authorizing-request這只是對/1/statuses/update.json的發佈請求。在該頁面上沒有關於oauth_token_secret的說法,所以我沒有在我的要求中使用它,只是把oauth_token放在裏面。提交後請求twitter給我的狀態代碼401未經授權。爲什麼?我必須在某處使用oauth_token_secret嗎?Twitter OAuth中的oauth_token_secret有什麼用?

回答

2

令牌密鑰用於散列簽名庫。有點像密碼。您不會發送密碼,您可以使用它來計算服務發送給您的安全散列。您發送該安全散列,然後服務會根據您發送的請求檢查安全散列。如果他們匹配,您就被授權。

底層細節在OAuth規範所描述的,RFC 5849

Twitter使用OAuth1.0a,但大多與規範相一致。

這裏的相關位:

http://tools.ietf.org/html/rfc5849#section-3.4.2

enter image description here

+0

OK,這個北京時間我在做什麼,它不工作。 我的頭字段授權有以下值:oauth_consumer_key,oauth_nonce,oauth_callback,oauth_signature_method,oauth_timestamp,oauth_version,組oauth_token和oauth_signature。在這種情況下,oauth_token不是oauth_token_secret,而是在對/ oauth/access_token的請求後獲得的訪問令牌。對於oauth_signature,密鑰是consumer_secret&oauth_token_secret(所有內容都已轉義),並且文本在轉義和排序後包含上面列出的所有值。我的方法有什麼問題嗎? – CommanderData

+0

是的,好吧。 oauth規範非常特別,一些小錯誤會導致「401未經授權」,但沒有任何問題。例如,sig基地需要對所有這些oauth元素進行排序。而且:密鑰的組成部分需要進行urlencoded編碼,而不是它們之間的符號。此外,編碼不符合HTTP規範,但必須使用特定於OAuth的url編碼(僅限大寫等)。然後你採用* that *的ascii編碼。簽名方法必須是HMAC-SHA1(我認爲)。很多細節,很容易弄錯一件事。很難診斷。 – Cheeso

+0

ps:你原來的問題,*我是否必須在某處使用oauth_token_secret?*讓我覺得你還沒有真正理解Twitter的oauth是如何工作的。它可能會要求您回去仔細查看文檔和代碼。 – Cheeso