我正在努力让Facebook C#SDK与offline_access和控制台应用程序一起使用。
根据我的理解,我必须:
我无法弄清楚如何获取(2)中的代码?
由于
答案 0 :(得分:0)
如果您在服务器端工作流程中进行身份验证,则通常会执行获取“代码”并交换令牌代码的操作。在您的场景中,它可能有点像红色鲱鱼。有更简单的方法可以直接获取访问令牌。
有更多上下文(包括代码)显示你如何获得offline_access(javascript,服务器端OAuth,......?)
当您通过Javascript SDK获得offline_access时,我认为这会提供最佳的用户体验,您将在Facebook的响应中获得访问令牌:
FB.login(function (response) {
if (response.session) {
if (response.perms) {
var accesstoken = response.session.access_token;
// do something with the token...save it, use it, etc.
} else {
// re-prompt for permissions
}
}
}, { perms: 'offline_access' });
一旦你在javascript中拥有它,你可以将它填入隐藏的表单字段,将它放在ajax帖子中,或者其他任何内容。
请注意,根据我的经验,您实际上并不需要已保存的用户访问令牌来为所有api方法执行脱机api调用。在某些情况下,您可以使用应用访问令牌,如果您有offline_access和其他所需权限,Facebook会让它飞起来。他们确实在上周发布了一篇开发人员博客帖子,说明你需要一些令牌,用于以前不需要的api调用,因此可能会发生变化。
还要注意这些令牌可能会变坏。例如,如果用户更改其Facebook帐户密码,则会使所有访问令牌无效。因此,测试它们,捕获OAuth异常,以及让用户注意重新提示权限并获取新的访问令牌是一件好事。
答案 1 :(得分:0)
用户授予您“offline_access”权限后,Facebook会使用“代码”查询字符串参数将用户重定向到您的应用程序URL。您需要获取此“代码”查询字符串参数。
然后,使用此“代码”值创建另一个WebRequest以获取访问令牌。使用以下URL发出请求:
https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}
可以像这样解析WebResponse:
NameValueCollection qs = HttpUtility.ParseQueryString(response);
token = qs["access_token"];
您需要将令牌保留在数据库中,以便在控制台应用程序中使用。