gpt4 book ai didi

c# - Twitter OAuth Flow - 对 oob/3-legged auth 和一般流程感到困惑,不需要 PIN?

转载 作者:行者123 更新时间:2023-11-30 15:39:05 26 4
gpt4 key购买 nike

接续自: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();
}

至此,我可以成功获取到response。

响应 --> 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 - 此时,应用程序已经拥有它需要的所有 token )

-如果我在第二个代码段期间没有登录,无论我是否输入 PIN,我都会收到 401 Unauthorized 错误,我猜这是预料之中的。

-如果我在第二个代码段登录并被定向到 PIN 页面,但随后选择不输入 PIN/在我的应用程序中输入一些错误的 PIN,我仍然成功通过身份验证并可以获得最终的 token 没有任何问题。为什么?

-我是在进行三足式 oAuth 还是 OOB oAuth?

-那我为什么需要 PIN 码?

-我应该如何正确使用 PIN(如果需要)?

-我应该如何在没有 PIN 的情况下进行身份验证(如果我不需要 PIN)?

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

最佳答案

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

你两者都在做。三足意味着您涉及用户,两足意味着企业对企业或服务对服务。 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)?

您将在下一步中使用它,在将请求 token 交换为访问 token 时,您将它作为 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?

这根本不可能是真的。这一定有一个很好的理由,也许您的应用程序已经有一个访问 token 并且只是使用它?

关于c# - Twitter OAuth Flow - 对 oob/3-legged auth 和一般流程感到困惑,不需要 PIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com