继续:在没有 3rd 方库的情况下设置 Twitter OAuth
感谢 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 输入到应用程序中,然后在response2中返回最终的 oauth_token 和 oauth_token_secret,以获得一个完全正常工作的 oAuth 应用程序。(tl;dr - 此时,应用程序已经拥有它需要的所有令牌)
- 如果我在第二个代码段期间没有登录,无论我是否输入 PIN,我都会收到 401 Unauthorized 错误,我猜这是预期的。
- 如果我在第二个代码段期间登录并被定向到 PIN 页面,但随后选择不输入 PIN/在我的应用程序中输入错误的 PIN,我仍然可以成功通过身份验证,并且可以在没有任何信息的情况下获得最终令牌问题。为什么?
- 我是在做 3-legged oAuth 还是 OOB oAuth?
- 那我为什么需要 PIN 码?
- 我应该如何正确使用 PIN 码(如果需要)?
- 我应该如何在没有 PIN 的情况下进行身份验证(如果我不需要它)?
-如何让用户在认证一次后不会总是看到 PIN 页面?我可以在第一个请求中放置一个回调,但是如果我不希望用户被重定向到任何页面怎么办?