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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

OAuth

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

Twitter

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

Q&A

1回答

3550閲覧

C#でtwitterのOAuth認証が出来ない

gari

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

OAuth

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

Twitter

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

0グッド

0クリップ

投稿2016/03/20 04:31

編集2016/03/20 04:34

Twitterのデスクトップクライアントを作ろうと思っているのですが、
OAuth認証がうまくいかず、リクエストトークンが帰ってきません。

勉強のため、C#のtwitter用ライブラリは使いたくありません。
そこで、googleの OAuthBase.cs というものを見つけ、
ブログなどの情報を頼りにリクエストトークンを送るところまで書いたのですが、
リクエストトークンを投げても、
「WebExceptionはハンドルされませんでした。
リモートサーバーがエラーを返しました:(401)許可されていません」となり
401エラーが帰ってきます。

どうしたらよいでしょうか。

環境は windows10 で VisualStudio2015 を使っています。

ソースも一応貼っておきます、よろしくお願いします。

C#

1 private void start_butten_Click( object sender, EventArgs e ) 2 { 3 ServicePointManager.Expect100Continue = false; 4 OAuth.OAuthBase oauth = new OAuth.OAuthBase(); 5 Settings sett = new Settings(); 6 7 Uri twitter_url = new Uri(request_token_url); 8 string timestamp = oauth.GenerateTimeStamp(); //UNIX時間でタイムスタンプを取得 9 string nonce = GenerateNonce(); //ランダムな文字列を生成 10 11 12 //OAuthBace.cs でsignature生成 13 string normalizedUrl; 14 string normalizedRequestParameters; 15 16 // 17 string signature = oauth.GenerateSignature( twitter_url, //認証を投げる先 18 consumer_key, //コンシューマキー 19 consumer_secret, //コンシューマシークレットキー 20 "", 21 "", 22 "GET", 23 timestamp, //UNIX時間でタイムスタンプ 24 nonce, //8文字以上の毎回異なるランダムな英数字 25 OAuth.OAuthBase.SignatureTypes.HMACSHA1, 26 out normalizedUrl, 27 out normalizedRequestParameters); 28 29 //oauth_token、oauth_token_secretを取得 30 HttpWebRequest web_req = (HttpWebRequest)WebRequest.Create( 31 normalizedUrl + "?" + normalizedRequestParameters + 32 "&oauth_signature=" + signature); 33 web_req.Method = "GET"; 34 web_req.ProtocolVersion = HttpVersion.Version11; 35 //web_req.Credentials = CredentialCache.DefaultCredentials; // 36 //web_req.UseDefaultCredentials = false; // 37 web_req.KeepAlive = false; // 38 39 HttpWebResponse web_res = (HttpWebResponse)web_req.GetResponse(); 40 41 Stream stream = web_res.GetResponseStream(); 42 StreamReader streader = new StreamReader(stream, Encoding.GetEncoding("UTF8")); 43 string result = streader.ReadToEnd(); 44 45 streader.Close(); 46 stream.Close(); 47 Console.WriteLine(result); 48 textBox.Text = result; 49 50 }

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

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

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

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

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

lib

2016/03/20 06:40 編集

少なくともそのライブラリがtwitterの最新の情報でとれる仕様になっていることの確認はされていますか?サードパーティ製で対応が間に合ってるものと対応が間に合ってないものが存在するので、その確認がされていないと、回答するこちらはそれを確認しなくてはなりません。
guest

回答1

0

oAuth 401で検索してみたところ、
アプリの設定画面のCallbackURLに何も入力されていない
API KEY(CONSUMER KEY)とAPI SECRET(CONSUMER SECRET)の設定が間違っている
コンピュータの時刻が狂っている
アプリがTwitterからSuspendされてる

等の原因があるとのことでしたが、試してみましたか?

参考URL - OAuth::Unauthorized 401 Unauthorizedなんてエラーがでたら

投稿2016/03/20 06:05

Narugal

総合スコア24

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

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

gari

2016/03/20 06:22

callbackURLは、デスクトップクライアントだと要らないというのと、いるという情報が、あったので空にしたり入れたりしてみましたが、変わりません。 KEYは何度も見直して、コピーし直しましたが変わらず。 アプリを作成し直しましたが、変わらず。 コンピューターの時刻は日本標準時のサイトを見ると0.4秒進んでいました、合っていますという状態にしても変わらずに401エラーが発生します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問