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

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

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

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

OAuth

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

Twitter

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

JavaScript

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

解決済

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

mao999
mao999

総合スコア0

Node.js

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

OAuth

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

Twitter

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

JavaScript

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

1回答

0評価

0クリップ

1859閲覧

投稿2016/08/21 05:31

編集2022/01/12 10:58

Node.jsでExpress等のフレームワークを使わずにTwitterAPIを利用しようとしていますが、
リクエストトークンを取得しようとする際に、
Could not authenticate you.が返ってきます。
何が間違っているのでしょうか。

※signature生成時あたりの処理が間違っているような気がします。

宜しくお願い致します。

lang

var https = require\('https'\); var nonce = require\('nonce'\) var url = require\('url'\); var fs = require\('fs'\); var crypto= require\('crypto'\), sha1sum=crypto\.createHash\('sha1'\); var SSL_SERVER_KEY = "~~"; var SSL_SERVER_CRT = "~~"; var SSL_CA_CRT = "~~"; var SSL_PASSPHRASE = "~~"; var https_server_options = { key: fs\.readFileSync\(SSL_SERVER_KEY\), cert: fs\.readFileSync\(SSL_SERVER_CRT\), ca: fs\.readFileSync\(SSL_CA_CRT\), passphrase: SSL_PASSPHRASE }; var server = https\.createServer\(https_server_options\); function doRequest\(req,res\) { switch\(req\.url\){ case 'auth/twitter'://WEBアプリのツイッター認証リンクを押した sha1sum\.update\(String\(nonce\(\)\)\); var HTTP_METHOD= "POST", API_URL = "https://api\.twitter\.com/oauth/request_token", API_URL_ENCODED = encodeURIComponent\(API_URL\), CALLBACK = "https://127\.0\.0\.1:8085/auth/twitter/callback", CALLBACK_URL_ENCODED = encodeURIComponent\(CALLBACK\), SIGNATURE_METHOD = "HMAC-SHA1", NONCE = sha1sum\.digest\('hex'\), TIMESTAMP = String\(Math\.floor\(Date\.now\(\)/1000\)\), OAUTH_VER = "1\.0"; console\.log\("HTTP_METHOD:"\+HTTP_METHOD\); console\.log\("API_URL:"\+API_URL\); console\.log\("API_URL_ENCODED:"\+API_URL_ENCODED\); console\.log\("CALLBACK:"\+CALLBACK\); console\.log\("SIGNATURE_METHOD:"\+SIGNATURE_METHOD\); console\.log\("NONCE:"\+NONCE\); console\.log\("TIMESTAMP:"\+TIMESTAMP\); console\.log\("OAUTH_VER:"\+OAUTH_VER\); //パラメータをソートして「キー=値&キー=値&\.\.\.」と繋ぐ var pre_sig_str_origin = //"oauth_callback="\+ CALLBACK \+"&"\+ "oauth_consumer_key="\+ TWITTER_CONSUMER_KEY \+"&"\+ "oauth_nonce="\+ NONCE \+"&"\+ "oauth_signature_method="\+ SIGNATURE_METHOD \+"&"\+ "oauth_timestamp="\+ TIMESTAMP \+"&"\+ "oauth_version="\+ OAUTH_VER; console\.log\("original str\[" \+ pre_sig_str_origin \+ "\]"\); //組み立てたパラメータをURLエンコード var pre_sig_str_encoded= encodeURIComponent\(pre_sig_str_origin\); console\.log\("param encoded str\[" \+ pre_sig_str_encoded \+ "\]"\); //URLエンコードした値を&でつなげる var pre_sig_str = HTTP_METHOD \+"&"\+ API_URL_ENCODED \+"&"\+ pre_sig_str_encoded; console\.log\("Signature base string\["\+pre_sig_str\+"\]"\); //HMAC-SHA1でハッシュ値を取る sha1sum = crypto\.createHash\('sha1'\); sha1sum\.update\(pre_sig_str\); //ハッシュ値をbase64エンコードする var SIGNATURE = new Buffer\(sha1sum\.digest\('hex'\)\)\.toString\('base64'\); var SIGNATURE_URI_ENCODED = encodeURIComponent\(SIGNATURE\); console\.log\("signature:" \+ SIGNATURE\); var headers = { "Content-Type" : 'application/json', "Authorization" : "OAuth " \+ //"oauth_callback=" \+ "\\"" \+ CALLBACK_URL_ENCODED \+"\\","\+ "oauth_consumer_key=" \+"\\""\+ TWITTER_CONSUMER_KEY \+"\\","\+ "oauth_nonce=" \+"\\""\+ NONCE \+"\\","\+ "oauth_signature=" \+"\\""\+ SIGNATURE_URI_ENCODED\+"\\","\+ "oauth_signature_method=" \+"\\""\+ SIGNATURE_METHOD \+"\\","\+ "oauth_timestamp=" \+"\\""\+ TIMESTAMP \+"\\","\+ "oauth_version=" \+"\\""\+ OAUTH_VER \+"\\"" }; var options = { url : API_URL, method : HTTP_METHOD, headers : headers, json : true, }; console\.log\(options\); request\(options, function\(error,response,body\){ console\.log\(body\); }\); break; default: break; } }\); server\.on\('request',doRequest\); server\.listen\(8085\);

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Node.js

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

OAuth

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

Twitter

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

JavaScript

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