延续自:Setting up Twitter OAuth without 3rd party libraries
感谢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 =真
//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条腿的oAuth或OOB oAuth吗?
- 为什么我需要PIN呢?
- 我应该如何正确使用PIN码(如果我需要)?
- 我应该如何在没有PIN的情况下进行身份验证(如果我不需要它)?
- 我如何制作,以便用户在验证一次后不会总是看到PIN页面?我可以在第一个请求中进行回调,但是如果我不想让用户重定向到任何页面呢?
答案 0 :(得分:4)
我是在做三条腿oAuth还是OOB oAuth?
你正在做两件事。三条腿意味着您涉及一个用户,双腿是企业对企业,或服务到服务。 OOB(带外)表示您自动触发基于PIN的身份验证方案。基本上这意味着您说没有用户手动输入密码而无法接收正常的oauth_verifier参数。
为什么我需要PIN呢?
您获得了PIN,因为您将回调声明为OOB。如果您设置了真正的回调,则可以直接将oauth_verifier接收到您的应用程序。
我应该如何正确使用PIN码(如果我需要)?
您在下一步中使用它,在交换访问令牌的请求令牌时,您将其作为oauth_verifier在请求中传递。
如果没有PIN码我应该如何进行身份验证(如果我不需要它)?
您需要PIN,或者如果您使用真正的回调,则需要oauth_verifier。它们是相同的,唯一的区别是PIN被打印在屏幕上,因此用户可以将其复制粘贴到您的应用程序中,而oauth_verifier会自动被您的应用程序选中。
我如何制作,以便用户在验证一次后不会总是看到PIN页面?我可以在第一个请求中进行回调,但是如果我不想让用户重定向到任何页面呢?
您使用拦截并使用oauth_verifier的实际回调。
- 如果我在第二个代码段中登录并且已被定向到PIN页面,但是然后选择不输入PIN /在我的应用程序中输入一些错误的PIN,我仍然可以成功通过认证并可以获得最终结果令牌没有任何问题。为什么呢?
这根本不可能是真的。必须有一个很好的理由,也许你的应用已经有一个访问令牌,只是使用它?