3

我正在编写一个在 Windows 计算机上运行的 .NET 应用程序。无法通过浏览器访问。问题是,我不能像我应该的那样进行身份验证。我目前正在使用 C# .NET 进行编码,更具体的是 C#。

  • 我的表单上有一个网络浏览器控件。
  • 用户通过此网络浏览器控件登录到 facebook。
  • 登录后,我开始身份验证程序。
  • 然后我检索一个代码。

这就是它出错的地方。使用此代码,我想获得访问令牌。生成的请求 URL 如下所示:https://graph.facebook.com/oauth/access_token?client_id=____MY_APP_ID______&redirect_uri=http://localhost/&client_secret=_____MY_APP_SECRET_____&code=____MY_RETREIVED_CODE_____并且是通过以下代码生成的。

请注意,我的重定向 URL 是http://localhost. 这应该没问题吧?

另外,在我的应用程序设置中,我有以下信息。

站点 URL:http://localhost/ 站点域:localhost

private String ExchangeCodeForToken(String code, Uri redirectUrl)
{
    var TokenEndpoint = new Uri("https://graph.facebook.com/oauth/access_token");
    var url = TokenEndpoint + "?" +
                      "client_id=" + _AppID + "&" +
                      "redirect_uri=" + redirectUrl + "&" +
                      "client_secret=" + _AppSecret + "&" +
                      "code=" + code;
    var request = WebRequest.CreateDefault(new Uri(url));
    using (var response = request.GetResponse())
    {
        using (var responseStream = response.GetResponseStream())
        {
            using (var responseReader = new StreamReader(responseStream))
            {
                var responseText = responseReader.ReadToEnd();
                var token = responseText.Replace("access_token=", "");
                return token;
            }
        }
     }
}

当我执行这个时,我得到这个错误:

错误 http://www.imageupload.org/getfile.php?id=50131&a=447f6fcc0ebd4d3f8e8a59a3a6e36ac3&t=4de0841c&o=0889D68FDC35508BA2C6F2689FCBAB7C30A8670CC9647EE598701D88BEC13EDn=auth.png8BEC13EDn=auth.png

用户代码未处理 Webexception 远程服务器返回错误:(400) 错误请求。

这是我认为我可能会出错的地方:

  • 我的应用设置是否正确?
  • 我的重定向 url 是否应该是http://localhost,即使那里实际上没有监听服务?

最重要的是:

  • 如何摆脱此错误并检索访问令牌?

提前致谢!

4

2 回答 2

2

您收到此错误是因为您不应该从桌面应用程序调用此 URL:据我所知,您不能使用令牌端点进行桌面应用程序身份验证。此外,您可以直接获取访问令牌(无需先询问代码)。这是你必须做的。

在嵌入式 Web 浏览器中加载以下 URL:

https://www.facebook.com/dialog/oauth?
  client_id=YOUR_APP_ID&
  redirect_uri=https://www.facebook.com/connect/login_success.html

用户将被要求登录并被重定向到此 URL,并在 URL 中使用访问令牌:

https://www.facebook.com/connect/login_success.html#access_token=...

因此,您必须检测重定向并从 URL 中检索访问令牌。

于 2011-05-28T02:49:49.883 回答
0

谢谢昆腾!

但是,我已经设法通过使用 C# Facebook SDK 解决了我自己的问题。这个软件开发工具包真的很有帮助!

包含大量样品(包括授权)

任何使用 .NET 和 facebook 编程的人都应该检查一下!为 facebook 编码现在更容易了。

http://facebooksdk.codeplex.com/

于 2011-05-28T20:43:39.017 回答