【问题标题】:Facebook C# SDK and Access TokenFacebook C# SDK 和访问令牌
【发布时间】:2011-03-02 17:44:29
【问题描述】:

我希望能够使用 Facebook C# SDK 在我自己的 Web 应用程序上验证自己的身份(我的个人资料,而不仅仅是我的应用程序)。使用 Graph API,我可以获得访问令牌,但该令牌似乎无法与 Facebook C# 一起正常工作,因为它似乎是无状态的。

抛出的错误是:

(OAuthException) An active access token must be used to query information about the current user.

我浏览了 Facebook C# SDK 和文档,我看到的大部分信息是将用户重定向到我不想要的登录页面。

有没有人有一个很好的自动登录示例,以便我可以提取自己的信息?

TIA

【问题讨论】:

  • 你能提供一些关于你想要做什么的信息吗?你是想在墙上发帖,获取你的状态,还是什么?这将对我们有很大帮助。根据您在做什么,您将需要一个已获得必要权限的应用程序,这将产生访问令牌。我们在这里谈论什么样的应用程序?网络应用程序? Windows 窗体? WPF?银光?电话?所有这些都将帮助我们为您提供答案..
  • 我正在使用网络应用程序,我正在尝试为我的帐户获取所有最新照片。我已经尝试过 Graph API 以及 Facebook C# SDK。 SDK 似乎只是一个包装器。
  • 我在抓取图像时也遇到了问题。 link

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


【解决方案1】:

当您说“您自己”时,您是指应用程序还是您的实际 Facebook 用户?

如果只是您的应用,您可以通过 POST 到此 URL 来获取访问令牌:

https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=APP_ID_HERE&client_secret=APP_SECRET_HERE

如果用户已授权您的应用执行此操作,您可以使用此访问令牌代表您的用户执行操作。

【讨论】:

  • 刚刚更新了我的问题。我知道我可以调用 Graph API,但每次我这样做时,它都会说我没有正确的凭据。我将尝试指定grant_type,因为到目前为止我还没有。我正在寻找我的个人资料,而不仅仅是我的应用程序。
  • 实际上,我确实尝试添加了该grant_type。
  • 我不知道该错误是由什么引起的。上面的 POST 应该适用于您的应用程序(至少可以获取访问令牌)。确保您使用的是 contenttype = "application/x-www-form-urlencoded" 我建议您手动完成 API 工作。我还没有找到一个跟上 API 变化的好 C# facebook 库。
  • 我再次用特定的 OAuth 错误更新了问题。我得到了一个身份验证令牌,但它似乎不适用于后续请求。
  • 所以我使用graph.facebook.com/oauth/access_token?client_id={app_id}&client_secret={app_secret}&grant_type=client_credentials&scope=user_photos,offline_access";
【解决方案2】:

我遇到了同样的问题,即访问令牌不包含会话部分。请查看我对这个类似问题的回答 - exchange code for token facebook-c#-sdk

这是我的 Home 控制器的示例

[CanvasAuthorize]
public ActionResult Index()
{
    var app = new FacebookClient(new Authorizer().Session.AccessToken);

    dynamic me = app.Get("me");
    ViewBag.Firstname = me.first_name;
    ViewBag.Lastname = me.last_name;

    return View();
}

编辑

现在我更好地理解了这个问题。这个呢?

var auth = new Authorizer(FacebookContext.Current.AppId, FacebookContext.Current.AppSecret, HttpContext);

auth.Authorize();

来自文档:

公共布尔授权() Facebook.Web.Authorizer 成员

总结: 如果用户未登录或应用程序没有所有指定的权限,则授权用户。

返回: 如果用户通过了身份验证并且应用程序具有所有指定的权限,则返回 true。

【讨论】:

  • 投反对票时请添加评论。
  • 那还不需要我登录吗?我想从代码登录。
  • 所以如果我尝试这样做,我会抛出异常:
  • 查找 'd:\Projects\facebooksdk\Source\Facebook.Web\Authorizer.cs' 的源。 (无校验和。)文件 'd:\Projects\facebooksdk\Source\Facebook.Web\Authorizer.cs' 不存在。在脚本文档中查找 'd:\Projects\facebooksdk\Source\Facebook.Web\Authorizer.cs'... 在项目中查找 'd:\Projects\facebooksdk\Source\Facebook.Web\Authorizer.cs'。在项目中找不到该文件。查看目录'c:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\'... 查看目录'c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\'。 ..
  • SDK 似乎没有正确安装/构建。我通过 NuGet 添加了我的命令“install-package FacebookWebMvc”
【解决方案3】:

我不知道这是否适合你:

using Facebook.Web;
using Facebook;
using System.Dynamic;

var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me"} };

if (auth.Authorize())
{
}

并将其包含在 aspx 中:

<input type="hidden" name="signed_request" value="<%: Request.Params["signed_request"]%>"/>

祝你好运!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多