gpt4 book ai didi

c# - 我如何从 live.com 获取 OAuth request_token?

转载 作者:行者123 更新时间:2023-11-30 15:35:21 24 4
gpt4 key购买 nike

这可能是一个重复的问题,但还没有答案。库 oauth-dot-net 和 DotNetOpenAuth 都非常复杂,一个似乎贯穿 OAuth 的主题,虽然 OAuth with Verification in .NET很有启发性,也更容易理解,它说

Use a WebBrowser control, and open the authorize web page within the desktop app. When the user clicks "Allow", grab the response text from that WebBrowser control, extract the PIN automatically, then get the access tokens. You send 5 or 6 HTTP requests but the user needs to see only a single Allow/Deny dialog. Simple.

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

Microsoft, this is aimed at you! I need to do pure REST, not mostly REST except when it's javascript.

I wish to retrieve a request token, as described by the OAuth RFC. A request token, not a software authentication robot. A REQUEST 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 love-in。那么,我如何从 live.com 获得请求 token 呢?

我目前正在研究发送的 HTML 所引用的混淆和压缩库,但这是一项繁重的工作。如果有人已经这样做了,我将非常感谢您的帮助。甚至指导如何劫持和跟踪此页面上的脚本,这可能会加快速度。

如果您正在检查 GET,重定向 URI http://whitehouse.podzone.net/映射到我家用台式机上的 Web 服务器,这通常是正在调试的应用程序中的 HttpListener,有时是 IIS。这就是我处理重定向的方式(通常只是放弃它,但很高兴知道事情已经走到这一步)。


我根据其他人围绕 Skydrive 所做的工作,从我所做的一些工作中获得了短期黑客攻击。它通过利用 Skydrive 应用程序已为每个 Live 帐户预先批准这一事实来避免该问题。然而,这是一个 hack。我想正确使用 OAuth,但这似乎不太实用。


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

To implement the client-side authentication flow, desktop apps must use a web browser control. Most development languages include such a control. In this example, our app uses the System.Windows.Forms.WebBrowser class. After sign in is complete, all subsequent Live Connect API calls can be accomplished by using the System.Net.WebRequest class. Use the web browser control to start the sign-in, passing a URL similar to this one.

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

我已经标记了 Darin 的回答,因为他非常努力地提供帮助并提供了一些优秀的东西,但我想我会坚持我的小技巧,这令人失望。

最佳答案

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

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

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

还有 authorization grant code flow (grant_type=code) 更适合基于 Web 的应用程序。

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

关于c# - 我如何从 live.com 获取 OAuth request_token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050113/

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