C#FatClient Facebook身份validation失败:返回URI不包含令牌

当使用System.Windows.Controls.Webbrowser接收Facebook oauth响应字符串进行身份validation时,我遇到了一个奇怪的问题。 发送以下请求URI:

 https://www.facebook.com/dialog/oauth?client_id=[APPID]&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=publish_stream,read_friendlists,email&response_type=token 

但我收到的只是https://www.facebook.com/connect/login_success.html ,即没有access_token。

FBLoginWindowFail

奇怪的是,将请求URI复制并粘贴到浏览器(例如IE8)中会正确返回auth-uri

 https://www.facebook.com/connect/login_success.html#access_token=[PROPERTOKEN]&expires_in=[PROPERNUMBER] 

以下是我一直在尝试的内容:(完全C#类: http : //pastebin.com/GePLHXnD )

首先,发送请求URI:

 private void Window_Loaded(object sender, RoutedEventArgs e) { StringBuilder authReqUri = new StringBuilder("https://www.facebook.com/dialog/oauth?client_id="); authReqUri.Append(Properties.Settings.Default.FBAppID); authReqUri.Append( "&redirect_uri=https://www.facebook.com/connect/login_success.html&scope="); authReqUri.Append(Properties.Settings.Default.FBScope); authReqUri.Append("&response_type=token"); Properties.Settings.Default.FBReqString = authReqUri.ToString(); return; } 

并且onWindowClose执行解析令牌:

  ///  /// Property to indicate if authentication with facebook was a success ///  public bool AuthenticatedSuccessfully { get { // Cast to a browser control to get at the current source if (uiFrameLogin.Content.GetType() == typeof(WebBrowser)) { WebBrowser webBrowser = (WebBrowser)uiFrameLogin.Content; if (webBrowser.Source != null && webBrowser.Source.ToString().Contains("&error")) return false; // look for an error else if ( webBrowser.Source != null && webBrowser.Source.AbsolutePath.Contains("login_success") ) { string temp; temp = Regex.Replace(webBrowser.Source.Fragment, "^.*access_token=", ""); Properties.Settings.Default.FBAccessToken = System.Text.RegularExpressions.Regex.Replace(temp, "&.*", ""); temp = Regex.Replace(webBrowser.Source.Fragment, "^.*access_token=.*&", ""); Properties.Settings.Default.FBExpiresIn = System.Text.RegularExpressions.Regex.Replace(temp, "expires_in=", ""); return true; // if its at this page, we've auth'd successfully } } return false; // cant find the success page, cant indicate a successful auth - no return false. } } 

这段代码有效….

 private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigated += new WebBrowserNavigatedEventHandler(webBrowser1_Navigated); webBrowser1.Navigate("https://www.facebook.com/dialog/oauth?client_id=[AppId]&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=publish_stream,read_friendlists,email&response_type=token"); } void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { Console.WriteLine(webBrowser1.Url); }