2017-10-18 22 views
0

Dearstweets post sur son propre compte Twitter en utilisant /1.1/statuses/update.json échoue, Impossible vous authentifier

J'ai investi un certain temps à essayer de poster des tweets à mon propre compte utilisateur twitter de mon site web sans utiliser de solutions toutes faites. Le site Web est accessible en lecture/écriture sur app.twitter.com et j'ai régénéré toutes les clés.

Je suis les instructions de l'API Twitter se référant à point final « POST /1.1/statuses/update.json »

J'ai revérifié tous mes objets et je reçois toujours

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 

Je veux envoyer un simple "Bonjour" de mon site web à mon compte Twitter et j'ai vérifié toutes les parties qui seront présentées ci-dessous.

En outre, la même logique est utilisée pour m'authentifier sur mon site Web en utilisant mon compte Twitter. Donc, je sais que l'autorisation (3-jambes) fonctionne correctement. Pour publier des tweets avec l'application mes rails, j'ai essayé à la fois 1) de poster le tweet en utilisant les paires client et accès de mon application sans passer par toutes les étapes d'autorisation et 2) de me diriger vers Twitter pour autoriser explicitement ma site web pour poster le tweet. Les deux scénarios conduisent à l'erreur 401. Tout fonctionne, sauf l'étape de tweeting réelle.

Toute aide est très appréciée. Veuillez noter que l'utilisation d'une gemme ne m'intéresse pas et que j'ai lu attentivement la documentation API associée.

Ici tous les électeurs de ma demande de poste:

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: 

Répondre

0

J'ai finalement eu à travailler. Plusieurs problèmes existaient. Pas avec les signatures et les en-têtes d'autorisation. Au lieu de cela, des problèmes existaient dans l'horodatage utilisé, qui n'était pas correctement synchronisé et qui n'était pas non plus en heure GMT, comme le prévoit Twitter. J'ai synchronisé mon horloge système avec time.google.com et cette partie a été réalisée. Maintenant, il y avait aussi un problème concernant l'en-tête qui nécessitait également le tri, contrairement aux docs de Twitter qui parlaient du tri dans le contexte de la chaîne de base de signature seulement. J'ai découvert que l'en-tête étendu doit également être trié. Étendu car il contient le tweet lui-même qui ne fait pas partie du calcul de la signature. une fois que cette partie a été construite en affichant le tweet a été couronnée de succès