使用 C# 桌面应用的 OAuth 用户代理流

本文关键字:OAuth 用户代理 应用 桌面 使用 | 更新日期: 2023-09-27 18:35:49

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

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

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

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


编辑:更多的挖掘揭示了以下堆栈溢出问题:

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

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


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

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

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


哦,好吧。因此,从我能够收集的信息来看,我需要设置一个本地 Web 服务作为 OAuth 的回调提供。我需要自己监听所述 Web 服务并捕获回调以将其传递给我的应用程序。但是,VS2010 提供的默认 ASP.NET Web 服务不支持 URL 参数,仅支持 API 调用,因此我显然需要使用 WCF Rest 初学者工具包。

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

使用 C# 桌面应用的 OAuth 用户代理流

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

我将这个嵌入式 Web 浏览器指向身份验证 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 服务。:)

调用您需要的授权类型 自动客户端 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>
您可以使用

DotNetOpenAuth库。有一个使用 WPF 的示例,其中它使用 DotNetOpenAuth 库提供的名为 ClientAuthorizationView 的 winforms 控件。

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

希望这有帮助。

问候