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

时间:2012-05-31 13:58:02

标签: c# authentication oauth oauth-2.0

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

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

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

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


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

How do I develop against OAuth locally?

我正在用他们的建议做更多的调查,但任何其他建议也会很棒。


编辑:更多搜索发现了这篇文章:

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并提取访问令牌。此时,我的应用是否请求访问令牌,或者我的网络服务是否可以将令牌“提供”给我的应用?即,控制点应该在哪里?

3 个答案:

答案 0 :(得分:4)

想出一个解决这个问题的聪明方法。我没有设置服务来侦听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服务。 :)

答案 1 :(得分:2)

调用您需要的授权类型Authonomous Client http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com#Obtaining_a_Token_in_an_Autonomous_Client_.28Username-Password_Flow.29。阅读您必须发送的网址。

grant_type=password&client_id=<your_client_id>&client_secret=<your_client_secret>&username=<your_username>&password=<your_password>

答案 2 :(得分:0)

您可以使用DotNetOpenAuth库。有一个使用WPF的例子,它使用了由DotNetOpenAuth库提供的名为ClientAuthorizationView的winforms控件。

它是一个托管浏览器的控件,允许用户在不离开应用程序的情况下授权客户端。

希望得到这个帮助。

此致