2011-05-30 84 views
0

我试图让Facebook C#SDK与offline_access和控制台应用程序一起工作。控制台应用程序和扩展权限offline_access工作流程

从我明白,我必须:

  1. 询问权威性的offline_access - 这很容易。
  2. 获得由FB返回“代码”,当用户授权offline_access
  3. 使用ExchangeCodeForAccessToken每次

我无法弄清楚如何抓住在代码中得到有效的访问令牌( 2)虽然?

感谢

回答

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异常,并且有一种方法可以让用户注意重新提示权限并获取新的访问令牌。

0

在用户授予您“offline_access”权限后,Facebook将用“code”查询字符串参数将用户重定向到您的应用程序URL。你需要抓住这个“code”查询字符串参数。

然后,使用此“代码”值创建另一个WebRequest以获取访问令牌。使用下面的网址发出请求:

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"]; 

您需要坚持在数据库中的令牌在控制台应用程序中使用。

相关问题