如何从live.com获取OAuth request_token?

这可能是一个重复的问题,但还没有答案。 图书馆oauth-dot-net和DotNetOpenAuth都令人费解,这个主题似乎贯穿于OAuth,而OAuth与.NET中的Verification一样具有指导意义且更容易理解,它说

使用WebBrowser控件 ,并在桌面应用程序中打开授权网页。 当用户单击“允许”时,从该WebBrowser控件中获取响应文本,自动提取PIN,然后获取访问令牌。 您发送5或6个HTTP请求,但用户只需要看到一个允许/拒绝对话框。 简单。

这是没有浏览器的OAuth吗? 不, 不是 。 如果您使用Web浏览器调用URL并运行响应,它就可以工作,这是HTML,元刷新,noscript标签和javascript中基于浏览器的自动化的全能舞蹈奇迹。 但我不想这样做。

微软,这是针对你的! 我需要做纯REST, 主要不是REST,除非它是javascript

我希望检索请求令牌,如OAuth RFC所述。 请求令牌,而不是软件身份validation机器人。 请求令。

当我使用WebClient直接执行此GET时

GET /oauth20_authorize.srf?client_id=00000000400A9B87&scope=wl.signin%20wl.basic&response_type=code&redirect_uri=http%3a%2f%2fwhitehouse.podzone.net%2f HTTP/1.1 

我找回了一个无法形容的机器生成的javascript混乱。 对于Pete的爱,我想要一个该死的request_token,而不是一个javascript爱情。 那么,我如何获得来自live.com的请求令牌呢?

我目前正在浏览由发送的HTML引用的混淆和压缩的库,但它很重要。 如果有人已经这样做了,我将非常感谢您的帮助。 甚至可以指导如何在这个页面上劫持和跟踪脚本,这可能会加快速度。

如果您正在检查GET,重定向URI http://whitehouse.podzone.net/将映射到我的家庭桌面计算机上的Web服务器,该计算机通常是正在调试的应用程序中的HttpListener,或者有时是IIS。 这就是我处理重定向的方式(通常只是放弃它,但知道事情已经走得那么好了)。


基于别人在Skydrive周围的工作,我做了一些短期的黑客攻击。 它通过利用Skydrive应用程序为每个Live帐户预先批准的事实来避免这个问题。 但是,这是一个黑客。 我想正确地使用OAuth,它似​​乎不会那么实用。


尽管有一个非常勇敢的尝试来帮助Darin,我发现了一些我希望我在第一天看到的东西,但我从他的链接中留下了这句话http://msdn.microsoft.com/en-us/library /live/hh826529.aspx (我的重点)

要实现客户端身份validation流程,桌面应用程序必须使用Web浏览器控件。 大多数开发语言都包含这样的控件。 在此示例中,我们的应用程序使用System.Windows.Forms.WebBrowser类。 登录完成后 ,可以使用System.Net.WebRequest类完成所有后续Live Connect API调用。 使用Web浏览器控件启动登录,并传递与此类似的URL。

他们只希望我使用他们的机器人进行登录,因为放弃对交换的控制使得更难以跳过呈现用户干预机会。 没有内在的原因我自己无法实施登录程序。 他们的javascript可以发布的任何内容我可以使用WebClient发布。 我可以做同样的加密。 在道德层面上,如果用户不希望我的软件执行其操作,则很难显示用户名和密码。

我已经标记了Darin的答案,因为他非常努力地帮助并提出了一些很好的东西,但我想我会坚持我的小黑客,这是令人失望的。

您可以将implicit grant flow与富客户端应用程序一起使用( grant_type=token )。 我们的想法是拥有一个WebBrowser控件,它通过重定向到live.com授权服务器并提供回调URL来启动身份validation流程。 如果用户授权您的应用程序,live.com将重定向回回调url并在url中传递访问令牌:

 http://contoso.com/Callback.htm#access_token=ACCESS_TOKEN 

然后,您可以从WebBrowser检索URL的access_token片段,并使用它来执行经过身份validation的请求。 您不需要在WebBrowser中解析返回的内容。 您需要做的是从URL中检索访问令牌。

还有authorization grant code flowgrant_type=code ),它更适合基于Web的应用程序。

您可以使用桌面应用程序查看following article以获取完整示例。