控制台应用程序和扩展的脱机访问权限工作流

本文关键字:访问 访问权 权限 工作流 脱机 应用程序 扩展 控制台 | 更新日期: 2023-09-27 17:58:10

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

据我所知,我必须:

  1. 请求offline_access的授权-这很容易
  2. 获取FB在用户授权offline_access时返回的"代码"
  3. 每次使用ExchangeCodeForAccessToken获取有效的访问令牌

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

感谢

控制台应用程序和扩展的脱机访问权限工作流

如果在服务器端工作流中进行身份验证,通常需要获取"代码"并将代码交换为令牌。在你的情况下,这可能有点转移注意力。有更简单的方法可以直接获取访问令牌。

有更多的上下文(包括代码)来显示您是如何获得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异常,并有一种方法引起用户的注意,重新提示权限并获得新的访问令牌。

在用户授予您"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"];

您需要将令牌持久化到数据库中,以便在控制台应用程序中使用。