Facebook访问令牌丢失

时间:2014-10-23 16:04:52

标签: facebook

按照使用手动登录工作流程获取桌面应用程序的FB访问令牌的说明不会为默认成功登录生成访问令牌。

如果我添加“user_likes”权限(我确定其他权限也可以,但“email”,“publish_actions”和“public_profile”不会)到登录URL范围参数(从而参与用户同意提供该权限),我收到一个访问令牌。

E.g:

此网址 -

  

https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token

生成以下回复网址 -

  

https://www.facebook.com/connect/login_success.html   < - 注意缺少的访问令牌

如果我修改请求网址以包含“user_likes”,如下所示 -

  

https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=user_likes < / p>

生成预期结果URL -

  

的https://www.facebook.com/connect/login_success.html#access_token=REDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTEDREDACTED&expires_in=5108029

我错过了什么?

我在Windows XP上使用WPF WebBrowser控件(是的,如果你能相信的话),如果这有帮助吗?

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的根源。它似乎是WPF WebBrowser控件中的一个旧错误,Facebook strips out the URL fragment用它来返回访问令牌。

Microsoft客户支持服务部​​门的Linda Liu提出的解决方法包括使用WinForms控件而不是WPF控件。

另一种方法是指定response_type = code(查询字符串中的响应)而不是response_type = token(URL片段中的响应)。缺点:您必须在请求中包含您的应用程序机密(以交换访问令牌的代码),这不应该在客户端完成以避免暴露它。有关详细信息,请查看this

注意:我还尝试从Windows Update(Windows XP上的目标.NET Framework 4.0)安装最新的修补程序,但问题仍然存在。