控制台应用程序和扩展权限offline_access工作流程

时间:2011-05-30 13:13:36

标签: c# facebook oauth facebook-c#-sdk

我正在努力让Facebook C#SDK与offline_access和控制台应用程序一起使用。

根据我的理解,我必须:

  1. 为offline_access请求身份验证 - 这很容易。
  2. 获取用户授权offline_access时返回的“代码”
  3. 每次使用ExchangeCodeForAccessToken获取有效的访问令牌
  4. 我无法弄清楚如何获取(2)中的代码?

    由于

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

您需要将令牌保留在数据库中,以便在控制台应用程序中使用。