【问题标题】:How to get the facebook signed request in c#如何在 C# 中获取 facebook 签名的请求
【发布时间】:2015-09-26 07:42:23
【问题描述】:

我是 Facebook 应用的新手。我正在尝试使用 Facebook 应用程序作为我的项目模板创建一个 MVC 4 应用程序。 我正在尝试捕获在其上创建页面选项卡的页面 id,并且以某种方式得到了它。 我的问题是当有人访问我的应用程序时,我想知道他们查看页面选项卡的页面 ID。我搜索了很多地方,我知道我必须为此使用FacebookSignedRequest。但是我没有这个课程。

提前感谢您的帮助。

【问题讨论】:

    标签: c# facebook asp.net-mvc-4 visual-studio-2012 facebook-c#-sdk


    【解决方案1】:

    如果您只是尝试从 Facebook 解析 signed_request 参数,您可以使用以下 C# 代码来实现。

    此代码还使用您自己的 app_secret 参数验证哈希,以确保 signed_request 来自 Facebook。

    public static string DecodeSignedRequest(string signed_request)
    {
        try
        {
            if (signed_request.Contains("."))
            {
                string[] split = signed_request.Split('.');
    
                string signatureRaw = FixBase64String(split[0]);
                string dataRaw = FixBase64String(split[1]);
    
                // the decoded signature
                byte[] signature = Convert.FromBase64String(signatureRaw);
    
                byte[] dataBuffer = Convert.FromBase64String(dataRaw);
    
                // JSON object
                string data = Encoding.UTF8.GetString(dataBuffer);
    
                byte[] appSecretBytes = Encoding.UTF8.GetBytes(app_secret);
                System.Security.Cryptography.HMAC hmac = new System.Security.Cryptography.HMACSHA256(appSecretBytes);
                byte[] expectedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(split[1]));
                if (expectedHash.SequenceEqual(signature))
                {
                    return data;
                }
            }
        }
        catch
        {
            // error
        }
        return "";
    }
    
    private static string FixBase64String(string str)
    {
        while (str.Length % 4 != 0)
        {
            str = str.PadRight(str.Length + 1, '=');
        }
        return str.Replace("-", "+").Replace("_", "/");
    }
    

    【讨论】:

      【解决方案2】:

      我所要做的就是创建一个 Facebook 客户端对象并使用应用程序密钥调用 ParseSignedRequest 方法。

      var fb = new FacebookClient();
      dynamic signedRequest = fb.ParseSignedRequest(appSecret, Request.Form["signed_request"]);
      

      这会返回一个我们必须使用 JObject.Parse 解析的 Json 对象

      【讨论】:

      • 嗨@Narasimha,我已经使用您上面的代码来获取页面ID,但在使用fb.parsesignedrequest 解析后,我得到了算法、发布时间、代码和用户ID 参数。其中没有页面ID。这是我关于 stackoverflow 的问题,stackoverflow.com/questions/20965063/…
      • @sainathsagar 请说明您要做什么
      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2014-03-02
      • 2012-08-21
      • 2017-12-25
      相关资源
      最近更新 更多