Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台应用程序和扩展权限脱机访问工作流_C#_Facebook_Oauth_Facebook C# Sdk - Fatal编程技术网

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

C# 控制台应用程序和扩展权限脱机访问工作流,c#,facebook,oauth,facebook-c#-sdk,C#,Facebook,Oauth,Facebook C# Sdk,我正试图让Facebook的C#SDK与离线访问和控制台应用程序一起工作 据我所知,我必须: 为离线访问请求auth-这很简单 获取用户授权离线访问时FB返回的“代码” 每次使用ExchangeCodeFracAccessToken获取有效的访问令牌 但是我不知道如何获取(2)中的代码 谢谢如果您在服务器端工作流中进行身份验证,通常会获取“代码”并将代码交换为令牌。在您的场景中,这可能有点像转移视线。有更简单的方法直接获取访问令牌 有更多的上下文(包括代码)来显示您是如何获得脱机访问的(java

我正试图让Facebook的C#SDK与离线访问和控制台应用程序一起工作

据我所知,我必须:

  • 为离线访问请求auth-这很简单
  • 获取用户授权离线访问时FB返回的“代码”
  • 每次使用ExchangeCodeFracAccessToken获取有效的访问令牌
  • 但是我不知道如何获取(2)中的代码

    谢谢

    如果您在服务器端工作流中进行身份验证,通常会获取“代码”并将代码交换为令牌。在您的场景中,这可能有点像转移视线。有更简单的方法直接获取访问令牌

    有更多的上下文(包括代码)来显示您是如何获得脱机访问的(javascript、服务器端OAuth等)

    当您通过Javascript SDK离线访问时,我认为它提供了最好的用户体验,您将在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调用。在某些情况下,您可以只使用应用程序访问令牌,如果您具有脱机访问权限和其他所需权限,Facebook将允许它运行。上周,他们确实发布了一篇开发人员博客文章,指出您需要一个令牌来进行一些以前不需要的api调用,因此这可能正在改变


    还要注意,这些代币可能会变坏。例如,如果用户更改其Facebook帐户密码,则会使所有访问令牌无效。因此,最好测试它们,捕获OAuth异常,并有办法让用户注意到这一点,以便重新提示权限并获取新的访问令牌。

    在用户授予您“脱机访问”权限后,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"];
    
    您需要将令牌保存在数据库中,以便在控制台应用程序中使用