C# 如何在c中获取facebook签名请求#

C# 如何在c中获取facebook签名请求#,c#,facebook,asp.net-mvc-4,visual-studio-2012,facebook-c#-sdk,C#,Facebook,Asp.net Mvc 4,Visual Studio 2012,Facebook C# Sdk,我是Facebook应用程序的新手。我正在尝试创建一个MVC4应用程序,将Facebook应用程序作为我的项目模板。 我试图捕获创建页面选项卡的页面id,我不知怎么得到了它。 我的问题是,当有人访问我的应用程序时,我想知道他们查看页面选项卡的页面id。我已经找了很多地方,我知道我必须用这个。但是这门课我没空 提前感谢您的帮助。我所要做的就是创建一个Facebook客户端对象,并使用appsecret调用ParseSignedRequest方法 var fb = new FacebookClien

我是Facebook应用程序的新手。我正在尝试创建一个MVC4应用程序,将Facebook应用程序作为我的项目模板。 我试图捕获创建页面选项卡的页面id,我不知怎么得到了它。 我的问题是,当有人访问我的应用程序时,我想知道他们查看页面选项卡的页面id。我已经找了很多地方,我知道我必须用这个。但是这门课我没空


提前感谢您的帮助。

我所要做的就是创建一个Facebook客户端对象,并使用appsecret调用ParseSignedRequest方法

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

这将返回一个Json对象,我们必须使用JObject解析它。parse

我所要做的就是创建一个Facebook客户端对象,并使用app secret调用ParseSignedRequest方法

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

这将返回一个Json对象,我们必须使用JObject解析它。parse

如果您只是试图解析Facebook的
签名请求
参数,您可以使用以下C代码进行解析

此代码还使用您自己的
app_secret
param验证哈希,以确保
signed_请求源自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("_", "/");
}

如果您只是想从Facebook解析
signed#u请求
参数,可以使用以下C#代码

此代码还使用您自己的
app_secret
param验证哈希,以确保
signed_请求源自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("_", "/");
}

您好@Narasimha,我使用了您上面的代码来获取页面id,但在使用fb.parsesignedrequest进行解析后,我得到了算法、issuedat、代码和用户id参数。其中没有页面id。这是我关于stackoverflow的问题,@sainatsagar请指定您试图做什么@Narasimha,我使用了您上面的代码来获取页面id,但在使用fb.parsesignedrequest进行解析后,我得到了算法、issuedat、代码和用户id参数。其中没有页面id。这是我关于stackoverflow的问题,@sainatsagar请说明您试图做什么