2017-10-18 231 views
0

逗人郵政鳴叫,無法驗證你

我一直在試圖從我的網站張貼鳴叫我自己的Twitter用戶帳戶投入相當長的一段時間無需使用任何現成的解決方案。 該網站在app.twitter.com上被授予讀/寫訪問權限,並且我重新生成了所有密鑰。

我下面參照端點「POST /1.1/statuses/update.json」

Twitter的API說明我有雙重檢查我的所有對象和我仍然得到

response  =--- !ruby/object:Net::HTTPUnauthorized 
http_version: '1.1' 
code: '401' 
message: Authorization Required 
header: 
    connection: 
    - close 
    content-length: 
    - '89' 
    content-type: 
    - application/json; charset=utf-8 
    date: 
    - Wed, 18 Oct 2017 15:28:19 GMT 
    server: 
    - tsa_o 
    set-cookie: 
    - personalization_id="v1_pxDMvL5ZrViFDcn8AfFemw=="; Expires=Fri, 18 Oct 2019 15:28:19 
    UTC; Path=/; Domain=.twitter.com 
    - guest_id=v1%3A150834049962807489; Expires=Fri, 18 Oct 2019 15:28:19 UTC; Path=/; 
    Domain=.twitter.com 
    strict-transport-security: 
    - max-age=631138519 
    x-connection-hash: 
    - '05228a7a2026efc93a8a2d4b1a8c6460' 
    x-response-time: 
    - '142' 
    x-tsa-request-body-time: 
    - '1' 
body: '{"errors":[{"code":32,"message":"Could not authenticate you."}]}' 
read: true 
uri: 
decode_content: true 
socket: 
body_exist: true 

我想從我的網站發送一個簡單的「你好」到我的Twitter帳戶,並且雙重檢查將在下面呈現的所有部分。

此外,同樣的邏輯用於在我的網站上使用我的Twitter帳戶對我進行身份驗證。所以我知道授權(三腳)正常工作。

用於發佈與我的Rails應用程序的推文,我已經嘗試了兩種方法1)使用我的應用程序的消費者和訪問令牌對發佈推文,而無需執行所有授權步驟以及2)引導自己到Twitter以顯式重新授權網站發佈推文。這兩種情況都會導致錯誤401.除了實際的推文步驟之外,一切都有效。

任何幫助,非常感謝。請注意,我對使用gem沒有興趣,並且已經仔細閱讀了相關的API文檔。

這裏我所有的post請求的成分:

Parameter String:  
include_entities=true& 
oauth_consumer_key=Xffffffffffffffffffffffff& 
oauth_nonce=1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8& 
oauth_signature_method=HMAC-SHA1& 
oauth_timestamp=1508340584& 
oauth_token=4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG& 
oauth_version=1.0& 
status=Hello 

signature base string: 
POST& 
https%3A%2F%2Fapi.twitter.com%2F1.1%2Fstatuses%2Fupdate.json& 
include_entities%3Dtrue%26 
oauth_consumer_key%3DXffffffffffffffffffffffff%26 
oauth_nonce%3D1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8%26 
oauth_signature_method%3DHMAC-SHA1%26 
oauth_timestamp%3D1508340584%26 
oauth_token%3D4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG%26 
oauth_version%3D1.0%26 
status%3DHello 

signing key: 
W6SzwsKSXwFpl8tb0UNJFoCTW6crf6p3JaS8GipJMErofZVLAA&ENxK6XHG8h2EI7dOeSL0fABJzqnzs7FhP6QirBbXvd0br 

signature: 
0zx68mHx/SxhHkoRpaqZmO8iC2s= 

header string: 
OAuth oauth_consumer_key="Xffffffffffffffffffffffff", 
oauth_nonce="1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8", 
oauth_signature="0zx68mHx%2FSxhHkoRpaqZmO8iC2s%3D", 
oauth_signature_method="HMAC-SHA1", 
oauth_timestamp="1508340584", 
oauth_token="4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG", 
oauth_version="1.0" 


POST REQUEST 
request  =--- !ruby/object:Net::HTTP::Post 
method: POST 
request_has_body: true 
response_has_body: true 
uri: 
path: "/1.1/statuses/update.json?include_entities=true" 
decode_content: true 
header: 
    content-type: 
    - application/x-www-form-urlencoded 
    authorization: 
    - OAuth oauth_consumer_key="Xffffffffffffffffffffffff", oauth_nonce="1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8", 
    oauth_signature="0zx68mHx%2FSxhHkoRpaqZmO8iC2s%3D", oauth_signature_method="HMAC-SHA1", 
    oauth_timestamp="1508340584", oauth_token="4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG", 
    oauth_version="1.0" 
    host: 
    - api.twitter.com 
    accept-encoding: 
    - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 
    accept: 
    - "*/*" 
    user-agent: 
    - Ruby 
body: '{"status":"Hello"}' 
body_stream: 
body_data: 

回答

0

我終於得到它的工作。存在幾個問題。不與簽名和授權標題。相反的問題存在於所使用的時間戳中,因爲它沒有正確同步,也沒有按照Twitter的預期在格林威治標準時間。我將我的系統時鐘與time.google.com同步,此部分完成。現在,還有一個關於需要排序的頭文件的問題,與twitter自己的文檔討論僅在簽名基本字符串的上下文中進行排序相反。我發現擴展頭還需要排序。擴展因爲它包含不屬於簽名計算一部分的推文本身。一旦這個部分建立在發佈鳴叫成功