3

続き:サードパーティライブラリを使用せずに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ページが常に表示されないようにするにはどうすればよいですか?最初のリクエストにコールバックを入れることもできますが、ユーザーがどのページにもリダイレクトされないようにするにはどうすればよいですか?

4

1 に答える 1

5

3本足のoAuthまたはOOBoAuthを実行していますか?

あなたは両方をやっています。3-leggedはユーザーが関与していることを意味し、2-leggedは企業間取引、またはサービス間取引を意味します。OOB(帯域外)とは、PINベースの認証スキームを自動的にトリガーすることを意味します。基本的に、これは、ユーザーが手動でPINとして入力しない限り、通常のoauth_verifierパラメーターを受け取ることができないことを意味します。

では、なぜPINが必要なのですか?

コールバックをOOBとして指定しているため、PINを取得します。実際のコールバックを設定すると、代わりにoauth_verifierをアプリケーションに直接受け取ることができます。

PINを正しく使用するにはどうすればよいですか(必要な場合)?

次のステップで使用します。リクエストトークンをアクセストークンと交換するときに、リクエストでoauth_verifierとして渡します。

PINなしで認証するにはどうすればよいですか(必要がない場合)?

PINが必要です。実際のコールバックを使用する場合は、oauth_verifierが必要です。これらは同じですが、唯一の違いは、PINが画面に印刷されるため、ユーザーがPINをコピーしてアプリケーションに貼り付けることができ、oauth_verifierがアプリケーションによって自動的に取得されることです。

ユーザーが一度認証した後にPINページが常に表示されないようにするにはどうすればよいですか?最初のリクエストにコールバックを入れることもできますが、ユーザーがどのページにもリダイレクトされないようにするにはどうすればよいですか?

oauth_verifierをインターセプトして使用する実際のコールバックを使用します。

-2番目のコードセグメントでログインし、PINページに移動した後、PINを入力しない/アプリケーションに間違ったPINを入力することを選択した場合でも、認証は正常に行われ、最終的なトークンを取得できます。問題。なんで?

これは単に真実ではありえません。これには正当な理由があるはずです。おそらく、アプリにはすでにアクセストークンがあり、それを使用しているだけですか?

于 2012-05-31T12:01:49.990 に答える