質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2353閲覧

Node.jsでTwitterAPIのOAuthをしてCould not authenticate you.

mao999

総合スコア111

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/08/21 05:31

編集2016/08/21 14:23

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

HMAC-SHA1の算出方法が間違っていました。
ただのSHA1でハッシュ値を計算していました。
MAC値計算時のKeyはCONSUMER_SECRET + "&"でした。

投稿2016/08/21 14:59

編集2016/08/22 04:50
mao999

総合スコア111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問