C# 如何在c中获取facebook签名请求#
我是Facebook应用程序的新手。我正在尝试创建一个MVC4应用程序,将Facebook应用程序作为我的项目模板。 我试图捕获创建页面选项卡的页面id,我不知怎么得到了它。 我的问题是,当有人访问我的应用程序时,我想知道他们查看页面选项卡的页面id。我已经找了很多地方,我知道我必须用这个。但是这门课我没空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客户端对象,并使用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请说明您试图做什么