2017-10-18 47 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自己的文档讨论仅在签名基本字符串的上下文中进行排序相反。我发现扩展头还需要排序。扩展因为它包含不属于签名计算一部分的推文本身。一旦这个部分建立在发布鸣叫成功