- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
接续自: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/
我有一个在大多数机器 OOB 上运行良好的商业应用程序。 我只有 1 个用户在启动 OOB 版本时出现以下错误(请注意,在他的浏览器中它运行良好)。 对不起俄语,但他的机器是俄语。 通常它说有错误并且
我想停用我的应用程序中的右键单击,该右键单击提供了在桌面上安装应用程序的选项。我该如何做这样的事情? 最佳答案 右键单击 Visual Studio 中的项目并选择属性。那里有一个复选框“启用浏览器运
在我的 Silverlight 5 OOB 主要方法中,我设置了自定义 Application.Current.MainWindow.Left 和 Application.Current.MainWi
删除 OOB 应用程序后,Isolated Storage 创建的文件会发生什么变化?它们是保留还是文件也被删除了?从我可以推断出的文件将被维护,以便浏览器中的同一个应用程序可以访问它们。对? 最佳答
我正在使用 OOB 功能将文件上传到共享点。我正在使用 包装所有数据的标签和功能。 (描述为here) 这是我的 elements.xml 文件中的模块示例: 唯一的问题是,当我停
我正在尝试使用 sllauncher.exe 安装全新的 Silverlight 5 应用程序。当我使用旧的 SL4 应用程序执行此操作时,它工作正常,但是,这个新的 SL5 应用程序有些不同,导致
我有一个使用 Silverlight 4 构建的 Silverlight 应用程序,它在浏览器外模式下工作。当我启动应用程序时,会出现一段时间的白屏。我做了一些谷歌搜索,这让我找到了 Mike Wol
我想在删除 OOB 应用程序时删除存储在独立存储中的文件。我怎样才能删除这些文件? 谢谢 最佳答案 好问题! This文章描述了如何在应用程序卸载时自动执行此过程: The previous code
我目前正在使用随机森林分类模型。我正在使用 randomForest 包。由于我总共处理 11 个不同的类,因此使用 plot() 函数会生成 12 个错误率图 - 类错误率和 OOB 错误率。有没有
假设您正在尝试以棋盘模式访问数组: 0 1 2 3 4 5 6 70 o • o • o • o •1 • o • o • o • o2 o • o • o • o •3 • o • o • o
我的 QuickSort 实现因索引越界错误而失败,我无法弄清楚原因。 unsigned long PerformQuickSort(std::vector& values) { unsign
我有一个 C 程序,可以将一些数据发送到远程机器上的 python 服务器。 C 代码连接套接字,然后发送带外消息和一些数据: int on = 1; fd = socket(PF_INET, SOC
当我启动我的 Silverlight 浏览器外应用程序时,窗口大小与我的布局不匹配。我已经看到了使用 Deployment.ApplicationIdentity 的 XML 文件提供不同大小图标的方
我有一个 Silverlight 应用程序,我使用 Prism 使用 MEF 动态加载模块。 当我从浏览器中取出这个应用程序时,我遇到了一些奇怪的行为! 如果在我加载我的 SL 应用程序时 fiddl
我正在寻找 Silverlight 来构建一个“跨平台”桌面应用程序(无论如何是 Windows 和 Mac),但是有一个我找不到解决方法的问题。在 Mac OS 上,在 Adobe AIR 中,
我想为 Windows 和 MacOS 的 oob 应用程序创建自定义安装程序。 对于 Windows,我使用了以下方法 - https://www.codeproject.com/Articles/
现在我有一个带有 SQL Server 后端的 Winform 应用程序。 DAL 由 Linq to SQL 组成。此应用程序的复杂性之一是它需要离线运行。 我通过使用合并复制使本地 SQL Exp
我在控制台中用 C++ 编写了一个贪吃蛇游戏,但遇到了一些我无法理解的问题。谁能帮帮我?根据以下代码: class Snake : public Fruit{ private:
我有一个如下所示的数据框 df1_new = pd.DataFrame({'person_id': [1, 1, 3, 3, 5, 5],'obs_date': ['7/23/2377 12:00:
有什么方法可以添加一些代码以在卸载 OOB silverlight 应用程序时触发?我想在用户卸载应用程序时向我的网络服务触发一些东西,这可能吗? 最佳答案 我发现您可以处理 App.xaml 上的“
我是一名优秀的程序员,十分优秀!