如何从live.com获取OAuth request_token?

时间:2013-02-24 08:48:21

标签: c# oauth

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

  

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

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

  

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

     

我希望检索请求令牌,如OAuth RFC所述。一个   请求令牌,而不是软件认证机器人。 请求   TOKEN。

当我使用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(我的重点)

  

要实现客户端身份验证流程,桌面应用必须   使用Web浏览器控件。大多数开发语言包括这样的   控制。在这个例子中,我们的应用程序使用   System.Windows.Forms.WebBrowser类。 登录完成后,全部   后续的Live Connect API调用可以通过使用   System.Net.WebRequest类。使用Web浏览器控件启动   登录,传递类似于此的URL。

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

还有authorization grant code flowgrant_type=code)更适合基于网络的应用。

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