使用C#Desktop App的OAuth用户代理流程

sic*_*umi 5 c# authentication oauth oauth-2.0

我目前正在尝试将OAuth 2.0用户代理流与客户端C#应用程序一起使用,并且我遇到了与重定向URI相关的一些混淆.

因为我正在使用客户端应用程序,所以我无法向Web服务器提供标准重定向URL.但是,根据我尝试进行身份验证的人员(在本例中为Salesforce),User-Agent Flow是用于客户端应用程序的正确流程.

我的问题是,在这种情况下,如何捕获访问令牌?显然,我可以创造一个"以客户端可以访问本地资源,"但我不熟悉这背后的机制,我找不到话题(部分原因是因为我不知道要寻找什么)的任何资源.

任何关于我应该开始寻找的指针都将非常感激.


编辑:更多的挖掘揭示了以下stackoverflow问题:

如何在本地针对OAuth进行开发?

我正在做一些他们建议的调查,但任何其他建议也会很好.


编辑:一些更多的搜索揭示了这篇文章:

http://sarangasl.blogspot.com/2010/09/create-simple-web-service-in-visual.html

仍然觉得我在黑暗中探索而不了解更大的图片,但我相信我需要使用localhost设置本地Web服务并指向我的重定向URI.然后,我将使用我的Web服务从OAuth服务器解包响应并让我的应用程序做出适当的响应.更多更新即将到来.


Ooookay.因此,从我能够收集到的内容来看,我需要设置一个本地Web服务作为OAuth的回调.我需要自己监听所说的Web服务并抓住回调将其传递给我的应用程序.但是,VS2010提供的默认ASP.NET Web服务不支持URL参数,只支持API调用,因此我显然需要使用WCF Rest入门工具包.

我对所有这些都完全陌生,所以任何提示在这一点上都是天赐之物.一般来说,我在想我设置一个本地WCF Rest服务,将该本地URI作为回调提供给OAuth,然后使用Rest服务捕获回调URL.然后我解析URL并提取访问令牌.此时,我的应用是否请求访问令牌,或者我的网络服务是否可以将令牌"提供"给我的应用?即,控制点应该在哪里?

sic*_*umi 5

想出了一个聪明的方法来解决这个问题。我没有设置服务来侦听 OAuth 的重定向 URL,而是在我的 Windows 表单中嵌入了一个 WebBrowser 控件。

我将此嵌入式 WebBrowser 指向身份验证 URL,让用户登录并使用 Salesforce 进行身份验证,并授予我的应用程序权限。然后,我让 Salesforce 将我的嵌入式浏览器重定向到我提供的虚拟重定向 URL。这个重定向实际上从未到达任何地方,它只是显示为 404。

但是,通过监视 WebBrowser.Url,我可以获取嵌入的 WebBrowser 控件指向的整个 URL,包括 Salesforce 附加的访问令牌。基本上,在用户进行身份验证并授予权限后,嵌入式浏览器将重定向到“http://www.dummyurl.com”。Salesforce 附加访问令牌,因此 WebBrowser.Url 最终看起来像这样:

http://www.dummyurl.com#access_token=ABCDEF&instance_url=ABCDEF

从这里,我可以解析 URL 并继续我的工作。无需第三方 Web 服务器或本地 Web 服务。:)

  • 这将是一个选择。但要小心:用户可以在您的 WebBrowser 上使用一些技巧,例如在浏览器历史记录中前进和后退、页面刷新、超时、网络中断。您将不得不处理所有 HTTP 错误代码 + 所有嵌入式浏览器令人讨厌的技巧。祝你好运 :) (2认同)