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
没有访问令牌。我做错了什么?
我在实现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,这次您可以读取哈希部分。