【问题标题】:Console apps and extended permission offline_access workflow控制台应用程序和扩展权限 offline_access 工作流程
【发布时间】:2011-05-31 22:27:01
【问题描述】:

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

据我了解,我必须:

  1. 为 offline_access 请求授权 - 这很简单。
  2. 获取用户授权offline_access时FB返回的“code”
  3. 每次使用 ExchangeCodeForAccessToken 获取有效的访问令牌

我不知道如何获取 (2) 中的代码?

谢谢

【问题讨论】:

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


    【解决方案1】:

    如果您在服务器端工作流程中进行身份验证,通常会获取“代码”并将代码交换为令牌。在您的场景中,这可能是一个红鲱鱼。有更简单的方法可以直接获取访问令牌。

    如果有更多的上下文(包括代码)来显示你是如何获得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 异常,并有办法让用户注意到这一点,以重新提示权限并获取新的访问令牌。

    【讨论】:

      【解决方案2】:

      在用户授予您“offline_access”权限后,Facebook 将使用“code”查询字符串参数将用户重定向到您的应用程序 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"];
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        相关资源
        最近更新 更多