我正在调用Facebook API,并尝试从响应中捕获访问令牌。
当我拨打以下网址时:
https://www.facebook.com/dialog/oauth?client_id={client_id}&display=popup&redirect_uri=http://www.facebook.com/connect/login_success.html&response_type=token
如果我已经登录,我会快速重定向到显示访问令牌的网址,或者在我的浏览器中显示FB登录表单:
https://www.facebook.com/connect/login_success.html#access_token={access_token}&expires_in={time}
以上网址仅在最终重定向到:
之前显示一两秒钟https://www.facebook.com/connect/blank.html#_=_
我的问题是,如何在第二个网址中捕获访问令牌?
我一直在尝试通过以下方法捕获网址:
private void FBBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) {
String urlResponse = e.Uri.ToString();
Console.WriteLine("FB URL Response: " + urlResponse);
}
问题在于,侦听器选取的URL是我拨打电话的第一个网址,而不是我所追求的响应网址。
(请注意,出于安全考虑,我已从网址中删除了access_token和client_id)
附加说明 - 在对浏览器中的请求序列进行一些检查后,我注意到第一个响应是HTTP 302,后面是HTTP 307. 307响应的位置标题就是我需要使用C#进行解析,因为它包含访问令牌。
答案 0 :(得分:0)
使用WPF Web浏览器控件时,在“#”符号后捕获字符似乎存在问题。这会导致访问令牌出现问题,因为它们在URL中返回如下:
#access_token='token_code'&expires_in='time'
此博客post涵盖了使用System.Windows.Controls.WebBrowser的变通方法。通过采用这种技术,我终于能够从URL解析访问令牌。
我希望这可以帮助其他可能遇到类似问题的人。