C#中的桌面应用程序:无法从嵌入式Web浏览器获取访问令牌

时间:2011-08-27 13:04:52

标签: c# facebook facebook-graph-api

我用C#创建了一个WPF桌面应用程序并放置了System.Windows.Controls.WebBrowser

键入此内容({0}是我的应用ID /密钥)

https://www.facebook.com/dialog/oauth?&client_id={0}&response_type=token&redirect_uri=https://www.facebook.com/connect/login_success.html&display=popup&scope=publish_stream,offline_access

手动进入我的firefox / ie / what并转到工作流程将我的回复发送到

https://www.facebook.com/connect/login_success.html#access_token=TOKEN
到目前为止,这很棒。

但导航我的System.Windows.Controls.WebBrowser到工作流程会将此浏览器重定向到

https://www.facebook.com/connect/login_success.html

没有访问令牌。我做错了什么?

2 个答案:

答案 0 :(得分:0)

我在实施Facebook PowerShell Module时遇到了类似的问题。您可能会在http://facebooksdk.codeplex.com/discussions/261528中遇到WPF中的错误。我不得不回到WinForms来实现登录功能。这也解决了我遇到的奇怪的崩溃问题。

答案 1 :(得分:0)

我想出了一个解决方法。 WPF浏览器切断了url的哈希部分,WinForms webbrowser没有。

请注意我的XAML窗口后面的代码,我将用它来获取用户的Facebook应用程序权限:

public partial class DiagnosticBrowserWindow : Window
{
    public DiagnosticBrowserWindow(string urlToRequest)
    {
        InitializeComponent();

        System.Windows.Forms.WebBrowser shadowBrowser = new System.Windows.Forms.WebBrowser();

        shadowBrowser.Navigated += (sender, e) =>
        {
            // the access token is now
            // here in e.Url
        };

        this.Browser.Navigated += (sender, e) =>
        {
            if (this.Browser.Source.AbsoluteUri.StartsWith("https://www.facebook.com/connect/login_success.html"))
            {
                shadowBrowser.Navigate(urlToRequest);
            }
        };

        this.Browser.Navigate(urlToRequest);
    }
}

这是有效的,因为一旦授予了应用程序权限(我们通过检测重定向到login_success.html来检测),我们将影子浏览器(即WinForms Webbrowser)发送到初始请求页面,该页面为:< / p>

https://www.facebook.com/dialog/oauth?&client_id={0}&response_type=token&redirect_uri=https://www.facebook.com/connect/login_success.html&display=popup&scope=publish_stream,offline_access

Facebook会检测到已经授权的权限,并将shadowBrowser发送回login_success.html,这次你可以读取哈希部分。