Twitter OAuth流程 - 对oob / 3-legged身份验证和一般流程感到困惑,不需要PIN?

时间:2012-05-30 15:17:18

标签: c# oauth twitter twitter-oauth

延续自: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页面?我可以在第一个请求中进行回调,但是如果我不想让用户重定向到任何页面呢?

1 个答案:

答案 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,我仍然可以成功通过认证并可以获得最终结果令牌没有任何问题。为什么呢?

这根本不可能是真的。必须有一个很好的理由,也许你的应用已经有一个访问令牌,只是使用它?