【问题标题】:Unable to get long lived expiration token无法获得长期有效的到期令牌
【发布时间】:2012-08-09 18:28:16
【问题描述】:

我使用 Facebook C# SDK v 6 并在我的应用程序设置中启用了“删除离线访问” 登录并获取访问令牌后,我正在尝试兑换长寿命令牌(60天之一) 我无法得到它,因为两个令牌都在 24 小时内到期。

这是我的代码

用于登录 Facebook

private const string Scope = "publish_stream,manage_pages";
   FacebookClient _fb = new FacebookClient();
   var fbLoginUrl = _fb.GetLoginUrl(
                new
                {
                    client_id = AppId,
                    client_secret = Appsecret,
                    redirect_uri = RedirectUri,
                    response_type = "code",
                    scope = Scope,
                    state = state
                });

获取短期访问令牌

if (Request.QueryString["code"] != null)
            code = Request.QueryString["code"];
           var result = _fb.Post("oauth/access_token",
                                  new
                                  {
                                      client_id = AppId,
                                      client_secret = Appsecret,
                                      redirect_uri = RedirectUri,
                                      code = code,
                                      scope = Scope,
                                      response_type="token"
                                  });

获取长期访问令牌

       var  result1 = _fb.Post("oauth/access_token",
                                  new
                                  {
                                      client_id = AppId,
                                      client_secret = Appsecret,
                                      grant_type = "fb_exchange_token",
                                      fb_exchange_token= Session["fb_access_token"] as string
                                  });

【问题讨论】:

  • 我认为端点希望通过 HTTP GET 与之交谈,而您正在使用 POST ...
  • 感谢您的回答。我尝试了 HTTP GET 仍然是相同的响应。如果我删除应用程序权限并重新添加,第一次在提示权限对话框后它会获得过期值(即长期令牌)。但如果我再次运行同一个应用程序,它不会获得过期值。
  • 所以我猜可能是这个错误,developers.facebook.com/bugs/339375252810525 你有没有用调试工具检查过你的令牌,它们的实际生命周期是多少? developers.facebook.com/tools/debug
  • 这是使用调试工具的响应,我很困惑,因为它说过期永远不会。应用 ID:应用 ID:测试用户 ID:: 发布:(22 小时前)过期:从不有效:真实来源:Web

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


【解决方案1】:

这样就可以了。

var result = GetExtendedAccessToken("my_short_lived_old_token");
var extendedToken = result.access_token;

public dynamic GetExtendedAccessToken(string oldToken)
{
    dynamic result = new ExpandoObject();
    try
    {
        var api = new FacebookClient
        {
            AccessToken = oldToken,
            AppId = ClientID,
            AppSecret = ClientSecret
        };
        dynamic parameters = new ExpandoObject();
        parameters.grant_type = "fb_exchange_token";
        parameters.fb_exchange_token = oldToken;
        parameters.client_id = ClientID;
        parameters.client_secret = ClientSecret;
        result = api.Get("oauth/access_token", parameters);
    }
    catch (FacebookOAuthException err)
    {
        result.error = "Error";
        result.message = err.Message;
    }
    catch (Exception err)
    {
        result.error = "Error";
        result.message = err.Message;
    }
    return result;
}

【讨论】:

  • 我得到了访问令牌但没有过期值。即使使用我之前发布的代码,我也得到了访问令牌,但它没有返回过期值。但是如果我删除应用程序,当我第一次发出请求时,它会获取过期值,之后它只会返回访问令牌。
猜你喜欢
  • 2018-09-08
  • 2017-02-07
  • 1970-01-01
  • 2012-08-22
  • 2012-02-20
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多