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

本文关键字:嵌入式 web 浏览器 访问令牌 获取 桌面 应用程序 | 更新日期: 2023-09-27 18:06:53

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

输入这个(其中{0}是我的应用程序id/key)

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/任何地方然后进入工作流将我送回

https://www.facebook.com/connect/login_success.html#access_token=TOKEN

到目前为止还不错。

但是导航我的System.Windows.Controls.WebBrowser到工作流将这个浏览器重定向到

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

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

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

我在实现Facebook PowerShell模块时碰到了这样的东西。您可能在WPF中遇到了一个bug。为了实现登录功能,我不得不回到WinForms。这也修复了我一直在经历的奇怪的出口崩溃。

我想出了一个解决办法。WPF浏览器会切断url的散列部分,而WinForms浏览器不会。

看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 web浏览器)发送到初始请求页面,这是:

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,这次您可以读取哈希部分。