C#:Can';无法从嵌入式webbrowser获取访问令牌
我用C#创建了一个WPF桌面应用程序,并放置了一个C#:Can';无法从嵌入式webbrowser获取访问令牌,c#,facebook,facebook-graph-api,C#,Facebook,Facebook Graph Api,我用C#创建了一个WPF桌面应用程序,并放置了一个System.Windows.Controls.WebBrowser 键入此内容(其中{0}是我的应用程序id/密钥) 手动输入我的firefox/ie/任意内容并转到工作流将我的返回发送到 https://www.facebook.com/connect/login_success.html#access_token=TOKEN 到目前为止还不错 但是将mySystem.Windows.Controls.WebBrowser导航到工作流会将此
System.Windows.Controls.WebBrowser
键入此内容(其中{0}
是我的应用程序id/密钥)
手动输入我的firefox/ie/任意内容并转到工作流将我的返回发送到
https://www.facebook.com/connect/login_success.html#access_token=TOKEN
到目前为止还不错
但是将mySystem.Windows.Controls.WebBrowser
导航到工作流会将此浏览器重定向到
https://www.facebook.com/connect/login_success.html
没有访问令牌。我做错了什么?在实现时遇到了类似的问题。您可能在WPF中遇到了错误。为了实现登录功能,我不得不回到WinForms。这也修复了我在退出时遇到的一个奇怪的崩溃。我想出了一个解决办法。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)发送到初始请求页面,该页面为:
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,这一次您可以读取哈希部分
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