続き:サードパーティライブラリを使用せずにTwitterOAuthを設定する
Nylander氏の助けのおかげで、私はoAuthクラスを機能させることができました(久しぶりですが)!ただし、oAuthフローのいくつかの側面について混乱しています。
これが私が作ったプログラムで起こっていることの内訳です:
==編集、部分的なコードを投稿すると思います。言葉だけで説明するのは難しいです==
//1st code segment
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.twitter.com/oauth/request_token");
string response = "";
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
response = reader.ReadToEnd();
}
この時点まで、私は正常に応答を得ることができます。
応答-> oauth_token= asjndiqufh9uf&oauth_token_secret = oinroiqurhwunwer&oauth_callback_confirmed = true
//2nd code segment
Process proc = new Process();
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.FileName = "https://api.twitter.com/oauth/authenticate?" + response;
proc.Start();
これにより、ユーザー(私)は、承認するかどうかを選択する必要があるページに移動します。同意すると、PINを含むページに移動します。
//3rd code segment
Console.WriteLine("Enter the PIN");
string pin = Console.ReadLine();
baseString = generateBaseString("POST", "https://api.twitter.com/oauth/access_token", oauth_token);
oauth_signature = generateSignature(baseString, oauth_token_secret);
HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create("https://api.twitter.com/oauth/access_token");
request2.Method = "POST";
request2.Headers["Authorization"] = generateAuthorizationHeader(oauth_token);
string response2 = "";
HttpWebResponse resp2 = (HttpWebResponse)request2.GetResponse();
using (StreamReader reader = new StreamReader(resp2.GetResponseStream()))
{
response2 = reader.ReadToEnd();
}
Console.WriteLine(response2);
}
ここでのコードは、PINをアプリケーションに入力するように要求し、完全に機能するoAuthアプリのresponse2で最後のoauth_tokenとoauth_token_secretを返します。(tl; dr-この時点で、アプリにはすでに必要なすべてのトークンがあります)
-PINを入力したかどうかに関係なく、2番目のコードセグメントでログインしなかった場合、401Unauthorizedエラーが発生します。これは予想されることだと思います。
-2番目のコードセグメントでログインし、PINページに移動した後、PINを入力しない/アプリケーションに間違ったPINを入力することを選択した場合でも、認証は正常に行われ、最終的なトークンを取得できます。問題。なんで?
-私は3本足のoAuthまたはOOBoAuthを実行していますか?
-なぜPINが必要なのですか?
-PINを正しく使用するにはどうすればよいですか(必要な場合)?
-PINなしで認証するにはどうすればよいですか(必要がない場合)?
-ユーザーが一度認証した後にPINページが常に表示されないようにするにはどうすればよいですか?最初のリクエストにコールバックを入れることもできますが、ユーザーがどのページにもリダイレクトされないようにするにはどうすればよいですか?