2011-05-06 101 views
2

我正在facebook应用程序上工作。我正在从我的应用用户那里获得离线访问权限。现在我希望我可以使用用户第一次使用我的应用时生成一次的相同令牌,并且我将该令牌存储在我的数据库中,并且每当用户在我们的网站上再次登录并希望通过我们的应用发布一些帖子时我们将在墙上发布相同的标记。Facebook离线访问.NET SDK

这里是我的代码

protected void Page_Load(object sender, EventArgs e) 
{ 
    var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me", "publish_stream", "video_upload", "share_item", "photo_upload", "offline_access" } }; 

    var fbWebContext = FacebookWebContext.Current; 
    if (fbWebContext.IsAuthorized()) 
    { 
     try 
     { 
      var fb = new FacebookWebClient(fbWebContext); 
      var token = fb.AccessToken; \\ Im Getting Token This Way When its Generated From User After Getting Extended Permission 
      dynamic result = fb.Get("/me"); 
      long id = fbWebContext.UserId; 
     } 
     catch (Exception ex) 
     { 
      if ("(OAuthException) Error validating access token: The session is invalid because the user logged out or because auth.expireSession was invoked." == ex.Message) 
      { 
       fbWebContext.DeleteAuthCookie(); 
       Session.Clear(); 
      } 
     } 
    } 
} 

我使用var token = fb.AccessToken获得访问令牌,但是当我使用它,它说

您的令牌在UNIX时间XXXXXXXXXX已过期。

任何人都可以告诉我任何人,如果这是访问令牌请求脱机访问的扩展权限后,为什么它说“您的访问令牌已过期?”。任何人都可以帮忙吗?

+0

Ramhound:我想你是错误的。基本上在oAuth 2.0中有不同类型的认证。带有过期令牌和不可过期令牌。当用户获得任何Facebook应用程序的扩展权限时,Facebook提供不可过期令牌。 – 2011-05-06 22:13:57

+0

您正在使用哪个库来处理认证/权限请求? – dwarfy 2011-05-07 11:44:57

+0

我想你可以尝试自己做oauth过程,这只是建立一个URL并加载它的问题..? – dwarfy 2011-05-07 11:54:07

回答

0

主要的问题在这里,即使你要求offline_access许可,你不能100%肯定的令牌永远不会exipre。

Access Access令牌可能会过期 - 即使是offline_access - 场景,例如:用户更改密码,应用程序机密更改等。在这些和其他情况下,您的应用程序必须能够检测到无效访问令牌并通过验证流程传递用户以获取新的新令牌。

您可以测试你的访问令牌,并通过使用访问令牌和访问令牌皮棉工具,让他们调试:https://developers.facebook.com/tools/access_tokenhttps://developers.facebook.com/tools/access_token/lint

要仔细检查你已经成功地得到了有效的令牌,复制和粘贴一个你通过API获得了图形浏览器工具。 https://developers.facebook.com/tools/explorer/?method=GET&path=me