如何使用 facebook c# SDK 发送 appsecret_proof?

2024-02-04

我想在我的 Facebook 应用程序上使用“需要应用程序密钥”(服务器 API 调用需要应用程序密钥), 但如果我这样做 - 我会收到以下错误:

(GraphMethodException - #100)未指定 appsecret_proof 参数

描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息:Facebook.FacebookApiException:(GraphMethodException - #100)未指定 appsecret_proof 参数

来源错误:

第 801 行:var fb = new FacebookClient(accessToken); 802 号线: 803号线:动态 facebookInfo = fb.Get("/me?appsecret_proof=" + fb.AppSecret + "&fields=电子邮件、生日、性别");第 804 行:signInInfo.Email = facebookInfo.email; 805号线:

I saw 这个帖子 https://stackoverflow.com/questions/20572523/c-sharp-help-required-to-create-facebook-appsecret-proof-hmacsha256,所以我想了解如何发送它...我需要切换到 fb.Post 吗?

另外,我想知道SDK是否还没有类似“GenereateFaceBookSecret()”的东西

提前致谢。


解决了!最后...并使用新的 facebook API v2.4

所以也许我可以节省其他人 6 个小时:-)

我创建了这个小助手类:

namespace YouProjectNamespace.Helpers 
{
    using System.Security.Cryptography;
    using System.Text;

    /// <summary>
    /// Facebook Helper
    /// </summary>
    public static class FacebookHelper
    {
        /// <summary>
        /// Generate a facebook secret proof (works with facebook APIs v2.4)
        /// <seealso cref="http://stackoverflow.com/questions/20572523/c-sharp-help-required-to-create-facebook-appsecret-proof-hmacsha256"/>
        /// </summary>
        /// <param name="facebookAccessToken"></param>
        /// <param name="facebookAuthAppSecret"></param>
        /// <returns></returns>
        public static string GenerateFacebookSecretProof(string facebookAccessToken, string facebookAuthAppSecret)
        {
            byte[] keyBytes = Encoding.UTF8.GetBytes(facebookAuthAppSecret);
            byte[] messageBytes = Encoding.UTF8.GetBytes(facebookAccessToken);
            HMACSHA256 hmacsha256 = new HMACSHA256(keyBytes);
            byte[] hash = hmacsha256.ComputeHash(messageBytes);
            StringBuilder sbHash = new StringBuilder();
            
            for (int i = 0; i < hash.Length; i++)
            {
                sbHash.Append(hash[i].ToString("x2"));
            }

            return sbHash.ToString();
        }
    }
}

这是如何使用它:

// Use Facebook SDK for .NET to get more specific data (https://github.com/facebook-csharp-sdk/facebook-csharp-sdk)

var identity = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
var facebookAccessToken = identity.FindFirstValue("FacebookAccessToken");
var fb = new FacebookClient(facebookAccessToken);

var facebookAuthAppSecret = "Use_Your_Own_Facebook_AppSecret_Here";
var facebookAppSecretProof = FacebookHelper.GenerateFacebookSecretProof(facebookAccessToken, facebookAuthAppSecret);

dynamic facebookInfo = fb.Get(string.Format("/me?appsecret_proof={0}&fields=email,birthday,gender", facebookAppSecretProof));
signInInfo.Email = facebookInfo.email;

我应该补充一点,为了使用 facebook SDK,应该添加一个声明, 这就是我在 Startup.Auth.cs 中的内容

            #region Facebook

            // https://developers.facebook.com/apps
            // https://developers.facebook.com/docs/facebook-login/permissions/v2.4
            // https://developers.facebook.com/docs/graph-api/reference/v2.4/post
            // https://developers.facebook.com/docs/apps/changelog#v2_4
            // https://developers.facebook.com/docs/graph-api/reference/user

            var facebookAuthOptions = new FacebookAuthenticationOptions();

            facebookAuthOptions.AppId = facebookAuthAppId;
            facebookAuthOptions.AppSecret = facebookAuthAppSecret;
            facebookAuthOptions.SendAppSecretProof = true;

            // public_profile (Default) includes: id,name,first_name,last_name,age_range,link,gender,locale,timezone,updated_time,verified
            facebookAuthOptions.Scope.Add("public_profile");
            facebookAuthOptions.Scope.Add("email");
            facebookAuthOptions.Scope.Add("user_birthday");
            facebookAuthOptions.Scope.Add("user_location"); // current city through the location field on the User object

            facebookAuthOptions.Provider = new FacebookAuthenticationProvider()
            {
                OnAuthenticated = (context) =>
                {
                    // http://stackoverflow.com/questions/7999934/facebook-c-sharp-sdk-problems-getting-user-email/8013211#8013211
                    // http://blogs.msdn.com/b/webdev/archive/2013/10/16/get-more-information-from-social-providers-used-in-the-vs-2013-project-templates.aspx
                    // Get the access token from FB and store it in the database and use FacebookC# SDK to get more information about the user
                    context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));

                    var expiryDuration = context.ExpiresIn ?? new TimeSpan();
                    context.Identity.AddClaim(new Claim("facebook:expires_in", DateTime.UtcNow.Add(expiryDuration).ToString(CultureInfo.InvariantCulture)));

                    // Add all other available claims
                    foreach (var claim in context.User)
                    {
                        var claimType = string.Format("facebook:{0}", claim.Key);
                        var claimValue = claim.Value.ToString();
                        if (!context.Identity.HasClaim(claimType, claimValue))
                            context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
                    }

                    return Task.FromResult(0);
                }
            };
            app.UseFacebookAuthentication(facebookAuthOptions);

            #endregion Facebook
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 facebook c# SDK 发送 appsecret_proof? 的相关文章

  • 如何获得永不过期的 Facebook_Account_(即页面)访问令牌?

    由于一些不幸的术语选择 这个主题很难在 Google 上搜索到 所以在我问问题之前 先快速澄清一下 Facebook 帐户 即一个人的顶级个人帐户 可以有子帐户 公司 品牌 名人等 不幸的是 Facebook 称之为 帐户 与这些 帐户 交
  • Facebook Graph API“/userid/feed”返回空白

    我正在使用 Facebook C SDK 但似乎无法使用 Graph API 获取反馈数据 我已从用户那里获得了以下扩展权限 范围 离线访问 publish stream publish checkins create event read
  • 一旦元素存在就触发事件的脚本?

    我正在尝试编写一个小 Greasemonkey 脚本来实现 Facebook 中的一些任务 例如隐藏新闻等 问题是 我有一个 DOM 中尚不存在的元素的 ID 这是点击帖子的箭头图标时出现的小框 如何通过 jQuery 创建一个事件处理程序
  • Parse.com PFUser 链接 Twitter 和 Facebook 帐户?

    我在用parse com作为我的应用程序的后端 它使用户能够通过他的 Facebook 或 Twitter 帐户登录 它还具有将 Twitter Facebook 链接到他预先存在的帐户的功能 问题是这样的 如果用户通过他的facebook
  • 如何让付费版和免费版iOS应用共享FB App ID?

    我有同一个 iPhone 应用程序的免费版和付费版 我希望他们共享一个 Facebook 应用程序 ID 因为它们本质上是同一个应用程序 我认为我可以通过使用 Facebook 类中的这个方法来完成此任务 void authorize NS
  • 未经授权访问用户 Facebook ID?

    我有一个本机 FBML Facebook 应用程序 我不想让应用程序访问者完成授权过程 但我确实想知道他们的 Facebook ID 是否可以找到访问用户的 Facebook ID 而不要求他们 授权 我的应用程序 之前 我说过这是不可能的
  • FB API 调用中“无法代表此用户调用 API”

    我在调用 facebook API 时遇到问题 我正在使用 Koala 进行服务器端 api 调用 但最近在进 行 api 调用时遇到问题 所以我尝试绕过 koala 调用并使用 call 进行原始 api http 调用 但无济于事 当我
  • Android Facebook SDK 4.5.0 登录注销问题,尝试再次登录时出现无效密钥哈希错误

    我按照中所述实现了 Facebook 登录按钮https developers facebook com docs facebook login android https developers facebook com docs face
  • PHP facebook SDK 中的授权码已过期

    我正在使用新的 4 facebook php SDK 但遇到了问题 基本上 我试图找到一种方法 在用户第一次重定向后向图形 api 发出请求登录 Facebook 后发送回我的网站 在这种情况下我会 在我的index php h Faceb
  • Facebook - 通过位置名称获取位置/地点 ID

    我可以通过图形 api 使用位置 ID 发送查询来返回位置详细信息 但是我希望实现相反的效果 通过发送包含位置名称 城市 州等 的请求来有效查找位置 id 这可能吗 这可以通过几种不同的方法实现 您可以使用经 纬度位置进行搜索 并将地名放入
  • Facebook api 从买卖组检索帖子

    我查遍了整个互联网 但没有找到答案 我在 facebook 上管理一个买卖组 并通过 facebook graph api 查询组 提要 如果我在群组中发布 讨论 帖子 它会显示在查询结果中 但我发布的 买 卖 帖子不会出现在查询结果中 图
  • Facebook 图表访问封闭群组提要/帖子

    我正在尝试获取 Facebook 上特定群组的帖子列表 即closed 我也是not管理员 只是该组的成员 当我尝试通过图形资源管理器访问该组的帖子时 我检查了所有权限 我收到返回的空列表 Facebook 不允许此访问的原因是什么 如果我
  • FFMPEG:尝试从图像和音频创建 facebook 流时出现转换失败错误?

    目标是从图像和音频文件创建 Facebook 流 这是我的命令 ffmpeg re y loop 1 f image2 i maxresdefault jpg i audio loop mp3 ar 44100 b a 128k vcode
  • CSS:DIV 中的文本被截断

    我正在致力于集成一个 jQuery 插件 该插件会隐藏页面的某些部分 直到用户单击 喜欢按钮 Facebook 小部件的部分文本被切断 我已经尝试过 CSS 但无法让它完全显示 如果容器的宽度设置正确 还有什么可能导致文本被截断 例子 ht
  • 是否可以更改 Facebook Connect 网站的范围?

    我正在构建一个 Facebook 应用程序 通过 Oauth 2 0 登录 Facebook 将来当我们添加功能时是否可以向用户请求更多权限 范围 或者我们是否需要预先请求所有权限 有人用 Facebook Connect 实现过这个吗 根
  • Windows Phone 8 Facebook 登录 应用程序不允许给定 URL

    我正在尝试按照以下教程将 Facebook 登录集成到我的应用程序中facebooksdk net http facebooksdk net 我正在尝试使用Facebook 按钮控制 http facebooksdk net docs ph
  • 创建连接到 facebook 的 j2me 应用程序(不是 swt 项目)

    我想创建一个简单的 j2me 应用程序作为开始 它与 facebook 链接 为了这 我从下载了 facebook apihttp kenai com projects facebookapime downloads http kenai
  • 我无法使用 Python 和 Facebook Marketing API 获取所有 Facebook 营销活动的统计信息

    我正在尝试检索以下指标 date campaign name impressions clicks spend 在我的 Facebook 帐户中的所有活动中 但显然我编写的脚本仅返回某些活动的统计数据 而不是全部 它仅返回大多数营销活动的营
  • Facebook 通过 API“Boost Post”?

    我一直在浏览文档 发现可以通过 Facebook 广告 API 实现 Boost Post 功能 但是 我在查找 Boost Post 到底有什么作用时遇到了一些困难 即 API 的哪一部分对应 Facebook UI 的 Boost Po
  • 自定义 Facebook FOSFacebookBundle 登录按钮

    有人知道如何自定义 更改 FosFacebook 登录按钮的图像吗 facebook login button autologoutlink true 并在整页 Facebook 登录上重定向 而不是在弹出窗口上重定向 这使用了 twig

随机推荐