6

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

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

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

任何关于我应该从哪里开始寻找的指针将不胜感激。


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

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

我正在对他们的建议进行更多调查,但任何其他建议也很好。


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

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

仍然觉得我在黑暗中四处闲逛,没有了解大局,但我相信我需要使用 localhost 设置本地 Web 服务并将我的重定向 URI 指向那里。然后,我将使用我的 Web 服务来解开来自 OAuth 服务器的响应,并让我的应用程序做出适当的响应。更多更新即将到来。


哎呀。因此,根据我收集到的信息,我需要设置一个本地 Web 服务作为 OAuth 的回调。我需要自己收听所说的网络服务并捕获回调以将其传递给我的应用程序。但是,VS2010 提供的默认 ASP.NET Web 服务不支持 URL 参数,只支持 API 调用,所以我显然需要使用 WCF Rest starter kit 来代替。

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

4

3 回答 3

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 并继续我的方式。无需第三方网络服务器或本地网络服务。:)

于 2012-06-01T19:40:49.457 回答
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。阅读您必须发送到那里的 URL。

grant_type=password&client_id=<your_client_id>&client_secret=<your_client_secret>&username=<your_username>&password=<your_password>
于 2012-06-01T13:38:26.547 回答
0

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

It is a control that hosts a browser allowing the user to authorize the client without leaving the application.

Hope this help.

Regards

于 2013-05-28T07:00:13.067 回答