Facebook c# SDK OAuth异常“需要ClientID”

本文关键字:需要 ClientID 异常 SDK OAuth Facebook | 更新日期: 2023-09-27 18:08:10

我认为这个问题与我之前的问题相似。使用。net 4上最新的c# Facebook SDK,我得到一个异常,消息"ClientID required",最后一行有以下代码:

    var app = new DefaultFacebookApplication();
    app.AppId = "appId";
    app.AppSecret = "secret";
    var fb = new FacebookWebContext(app);
    fb.IsAuthenticated();

App ID和secret设置正确。异常的堆栈跟踪如下:系统。异常发生

  Message=ClientID required.   Source=Facebook   StackTrace:
       at Facebook.FacebookOAuthClient.BuildExchangeCodeForAccessTokenParameters(IDictionary`2 parameters, String& name, String& path)
       at Facebook.FacebookOAuthClient.ExchangeCodeForAccessToken(String code, IDictionary`2 parameters)
       at Facebook.FacebookSession.get_AccessToken()
       at Facebook.FacebookSession.get_Expires()
       at Facebook.Web.FacebookWebContext.IsAuthenticated()
       at Piedone.FacebookTest.Authorize()   InnerException:

在客户端,我使用JS SDK,初始化如下:

            FB.init({
                appId: appId,
                status: true, // check login status
                cookie: true, // enable cookies to allow the server to access the session
                xfbml: true, // parse XFBML
                oauth: true // enable OAuth 2.0
            });

用户使用JS的login()方法正确登录,如下段代码中的警报运行:

        FB.login(function (response) {
            if (response.authResponse) {
                alert("logged in");
            } else {
                alert('User cancelled login or did not fully authorize.');
            }
        }, { scope: scope });

在Facebook上的应用程序设置中,"强制使用OAuth调用和auth的登录秘密"。开启"登入密码"及"加密登入令牌"。据我所知,所有这些都应该启用OAuth 2身份验证。有人知道我哪里做错了吗?在这几行代码中真的不可能有任何错误…

提前感谢您的帮助!

编辑:

FacebookWebContext的AccessToken属性抛出与HttpContext相同的错误。CurrentNotification:

CurrentNotification '(_facebookWebContextCache.HttpContext).CurrentNotification' threw an exception of type 'System.PlatformNotSupportedException'  System.Web.RequestNotification {System.PlatformNotSupportedException}
This operation requires IIS integrated pipeline mode.

因为我必须运行程序从Visual Studio与它的开发服务器(因为我目前正在开发的应用程序),没有办法可以做任何关于后者的例外,我想。实际上,我也尝试过Webmatrix的IIS express,但问题仍然存在。同样有趣的是,在FacebookWebContext中设置(app id, secret)也是正确设置的,用户id和签名请求也在那里…

编辑2:在使用SDK源代码时,我也会得到相同的错误。看起来AccessToken和Session中的Expires属性抛出了异常。我不知道这是否与上面的httpcontext问题有关。

Facebook c# SDK OAuth异常“需要ClientID”

另一个解决方案是将facebook设置添加到您的web或应用程序配置

<facebookSettings appId="appid" appSecret="secret" />

之后创建Auth类

var oauth = new FacebookOAuthClient(FacebookApplication.Current);

同样可以

最后我设法解决了这个问题,但这很可能是SDK中的错误。

问题是facebook的应用程序。Current是空的,因为它没有在FacebookWebContext函数中填充数据集。这导致了访问令牌的问题:在FacebookSession。第119行上的AccessToken facebookkoauthclient用FacebookApplication实例化。目前,那当然实际上是空的。所以FacebookOAuthClient抛出异常,因为它没有得到应用程序设置。

解决方案

解决方法是简单地显式地设置当前的FacebookApplication和实例化FacebookWebContext:

var app = new DefaultFacebookApplication();
app.AppId = "appId";
app.AppSecret = "secret";
var fb = new FacebookWebContext(app);
FacebookApplication.SetApplication(app); // Note this is the new line