编程语言
首页 > 编程语言> > C#-Twitter OAuth流程-对oob / 3足身份验证和一般流程感到困惑,不需要PIN吗?

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

作者:互联网

延续自: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 = 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输入到应用程序中,然后在响应2中返回完整的oAuth应用程序的最终oauth_token和oauth_token_secret. (tl; dr-至此,应用程序已拥有所需的所有令牌)

-如果在第二个代码段中尚未登录,则无论是否输入PIN都会收到401 Unauthorized错误,我猜这是可以预期的.

-如果我已经在第二个代码段中登录并被定向到PIN页面,但是随后选择了不输入PIN /在应用程序中输入错误的PIN,我仍然可以成功通过身份验证,并且无需任何操作即可获得最终令牌问题.为什么?

-我是在做三足式OAuth还是OOB OAuth?

-为什么我需要PIN码?

-如何正确使用PIN码(如果需要)?

-如果没有PIN,我应该如何进行身份验证(如果不需要)?

-如何进行设置,以使用户在进行一次身份验证后不会总是看到PIN页?我可以在第一个请求中添加回调,但是如果我根本不希望用户重定向到任何页面怎么办?

解决方法:

Am I doing a 3-legged oAuth or an OOB oAuth?

你们都在做. 3条腿表示您正在吸引用户,2条腿表示企业对企业或服务对服务. OOB(带外)表示您自动触发基于PIN的身份验证方案.基本上,这意味着您要说的是,如果没有用户手动将其作为PIN输入,则无法接收正常的oauth_verifier参数.

Why would I need the PIN then?

获得PIN是因为您将回调声明为OOB.如果您设置了真实的回调,则可以直接将oauth_verifier接收到您的应用程序.

How am I supposed to use the PIN correctly (if I need it)?

在下一步中使用它,将请求令牌交换为访问令牌时,会将其作为oauth_verifier传递给请求.

How am I supposed to authenticate without the PIN (if I DON’T need it)?

您需要PIN,或者如果您使用真实的回调,则需要oauth_verifier.它们是同一回事,唯一的区别是PIN会打印在屏幕上,以便用户可以将其复制粘贴到您的应用程序中,而oauth_verifier会被您的应用程序自动提取.

How do I make it so that users won’t always see the PIN page after authenticating one time? I could put a callback in the very first request, but what if I don’t want the user to get redirected to ANY page at all?

您使用一个真正的回调来拦截并使用oauth_verifier.

-If I have logged in during the second code segment and have been directed to the PIN page, but then chose NOT to enter the PIN/enter some wrong PIN into my application, I still get successfully authenticated and can get the final tokens without any problems. Why?

这根本不可能是真的.一定有一个很好的理由,也许您的应用程序已经具有访问令牌并且仅使用它了?

标签:twitter,oauth,twitter-oauth,c
来源: https://codeday.me/bug/20191101/1982337.html