Node.jsでExpress等のフレームワークを使わずにTwitterAPIを利用しようとしていますが、
リクエストトークンを取得しようとする際に、
Could not authenticate you.が返ってきます。
何が間違っているのでしょうか。
※signature生成時あたりの処理が間違っているような気がします。
宜しくお願い致します。
lang
1var https = require('https'); 2var nonce = require('nonce') 3var url = require('url'); 4var fs = require('fs'); 5var crypto= require('crypto'), 6 sha1sum=crypto.createHash('sha1'); 7 8var SSL_SERVER_KEY = "~~"; 9var SSL_SERVER_CRT = "~~"; 10var SSL_CA_CRT = "~~"; 11var SSL_PASSPHRASE = "~~"; 12 13var https_server_options = { 14 key: fs.readFileSync(SSL_SERVER_KEY), 15 cert: fs.readFileSync(SSL_SERVER_CRT), 16 ca: fs.readFileSync(SSL_CA_CRT), 17 passphrase: SSL_PASSPHRASE 18}; 19var server = https.createServer(https_server_options); 20function doRequest(req,res) { 21 switch(req.url){ 22 case 'auth/twitter'://WEBアプリのツイッター認証リンクを押した 23 sha1sum.update(String(nonce())); 24 var HTTP_METHOD= "POST", 25 API_URL = "https://api.twitter.com/oauth/request_token", 26 API_URL_ENCODED = encodeURIComponent(API_URL), 27 CALLBACK = "https://127.0.0.1:8085/auth/twitter/callback", 28 CALLBACK_URL_ENCODED = encodeURIComponent(CALLBACK), 29 SIGNATURE_METHOD = "HMAC-SHA1", 30 NONCE = sha1sum.digest('hex'), 31 TIMESTAMP = String(Math.floor(Date.now()/1000)), 32 OAUTH_VER = "1.0"; 33 34 console.log("HTTP_METHOD:"+HTTP_METHOD); 35 console.log("API_URL:"+API_URL); 36 console.log("API_URL_ENCODED:"+API_URL_ENCODED); 37 console.log("CALLBACK:"+CALLBACK); 38 console.log("SIGNATURE_METHOD:"+SIGNATURE_METHOD); 39 console.log("NONCE:"+NONCE); 40 console.log("TIMESTAMP:"+TIMESTAMP); 41 console.log("OAUTH_VER:"+OAUTH_VER); 42 43 //パラメータをソートして「キー=値&キー=値&...」と繋ぐ 44 var pre_sig_str_origin = 45 //"oauth_callback="+ CALLBACK +"&"+ 46 "oauth_consumer_key="+ TWITTER_CONSUMER_KEY +"&"+ "oauth_nonce="+ NONCE +"&"+ 47 "oauth_signature_method="+ SIGNATURE_METHOD +"&"+ 48 "oauth_timestamp="+ TIMESTAMP +"&"+ "oauth_version="+ OAUTH_VER; 49 console.log("original str[" + pre_sig_str_origin + "]"); 50 //組み立てたパラメータをURLエンコード 51 var pre_sig_str_encoded= encodeURIComponent(pre_sig_str_origin); 52 console.log("param encoded str[" + pre_sig_str_encoded + "]"); 53 //URLエンコードした値を&でつなげる 54 var pre_sig_str = HTTP_METHOD +"&"+ API_URL_ENCODED +"&"+ pre_sig_str_encoded; 55 console.log("Signature base string["+pre_sig_str+"]"); 56 //HMAC-SHA1でハッシュ値を取る 57 sha1sum = crypto.createHash('sha1'); 58 sha1sum.update(pre_sig_str); 59 //ハッシュ値をbase64エンコードする 60 var SIGNATURE = new Buffer(sha1sum.digest('hex')).toString('base64'); 61 var SIGNATURE_URI_ENCODED = encodeURIComponent(SIGNATURE); 62 console.log("signature:" + SIGNATURE); 63 64 var headers = { 65 "Content-Type" : 'application/json', 66 "Authorization" : "OAuth " + 67 //"oauth_callback=" + "\"" + CALLBACK_URL_ENCODED +"\","+ 68 "oauth_consumer_key=" +"\""+ TWITTER_CONSUMER_KEY +"\","+ 69 "oauth_nonce=" +"\""+ NONCE +"\","+ 70 "oauth_signature=" +"\""+ SIGNATURE_URI_ENCODED+"\","+ 71 "oauth_signature_method=" +"\""+ SIGNATURE_METHOD +"\","+ 72 "oauth_timestamp=" +"\""+ TIMESTAMP +"\","+ 73 "oauth_version=" +"\""+ OAUTH_VER +"\"" 74 }; 75 var options = { 76 url : API_URL, 77 method : HTTP_METHOD, 78 headers : headers, 79 json : true, 80 }; 81 console.log(options); 82 request(options, function(error,response,body){ 83 console.log(body); 84 }); 85 break; 86 default: 87 break; 88 } 89 90}); 91server.on('request',doRequest); 92server.listen(8085); 93
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。