Pro*_*tus 3 c# twitter oauth twitter-oauth
继续:在没有第 3 方库的情况下设置 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();
}
Run Code Online (Sandbox Code Playgroud)
至此,我已经可以成功得到回复了。
响应 --> 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();
Run Code Online (Sandbox Code Playgroud)
这会将用户(我)带到一个页面,我必须在其中选择是否要授权。如果我同意,我将被带到包含 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);
}
Run Code Online (Sandbox Code Playgroud)
这里的代码只是请求将 PIN 输入到应用程序中,然后在response2中返回最终的 oauth_token 和 oauth_token_secret以获得完全运行的 oAuth 应用程序。(tl;dr - 此时,应用程序已经拥有它需要的所有令牌)
-如果我在第二个代码段期间没有登录,无论我是否输入 PIN,我都会收到 401 未经授权的错误,我猜这是预期的。
-如果我在第二个代码段期间登录并被定向到 PIN 页面,但随后选择不输入 PIN/在我的应用程序中输入一些错误的 PIN,我仍然可以成功通过身份验证,并且可以获得最终令牌,而无需任何操作问题。为什么?
- 我正在执行 3 足 oAuth 还是 OOB oAuth?
- 那我为什么需要 PIN 码?
- 我该如何正确使用 PIN 码(如果需要的话)?
- 我该如何在没有 PIN 的情况下进行身份验证(如果我不需要它)?
- 如何使用户在验证一次后不会总是看到 PIN 页面?我可以在第一个请求中放置回调,但是如果我根本不希望用户重定向到任何页面怎么办?
我正在执行 3 足 oAuth 还是 OOB oAuth?
你两者都在做。三足意味着您涉及用户,两足是企业对企业或服务对服务。OOB(带外)意味着您自动触发基于 PIN 的身份验证方案。基本上,这意味着如果用户不手动输入 PIN 码,则无法接收正常的 oauth_verifier 参数。
那么为什么我需要 PIN 码呢?
您收到 PIN 码是因为您将回拨声明为 OOB。如果您设置了真正的回调,您可以直接将 oauth_verifier 接收到您的应用程序。
我该如何正确使用 PIN 码(如果需要)?
您将在下一步中使用它,当将请求令牌交换为访问令牌时,您将其作为 oauth_verifier 在请求中传递。
我该如何在没有 PIN 的情况下进行身份验证(如果我不需要它)?
您需要 PIN,或者如果您使用真正的回调,则需要 oauth_verifier。它们是同一件事,唯一的区别是 PIN 打印在屏幕上,以便用户可以将其复制粘贴到您的应用程序中,而 oauth_verifier 会由您的应用程序自动获取。
如何使用户在验证一次后不会总是看到 PIN 页面?我可以在第一个请求中放置回调,但是如果我根本不希望用户重定向到任何页面怎么办?
您使用一个真正的回调来拦截并使用 oauth_verifier。
-如果我在第二个代码段期间登录并被定向到 PIN 页面,但随后选择不输入 PIN/在我的应用程序中输入一些错误的 PIN,我仍然可以成功通过身份验证,并且可以获得最终令牌,而无需任何操作问题。为什么?
这根本不可能是真的。这一定有一个很好的理由,也许您的应用程序已经有一个访问令牌并且只是使用它?
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |