解码没有认证的签名请求

时间:2011-10-25 14:58:39

标签: c# facebook facebook-graph-api facebook-c#-sdk

我们是否可以使用Facebook C#SDK解码传递到Facebook标签页的 signed_request 参数,不使用身份验证?基本上,我正在寻找一种方法来解码和解析signed_request包含的页面JSON对象

我正在寻找 .NET C# equivelent来完成此PHP示例中的相同类型的解码:Seamless way to check if user likes page

2 个答案:

答案 0 :(得分:8)

我只是粘贴了我在另一篇文章中回答的相同答案。

Fans-only content in facebook with asp.net C# sdk

在Facebook画布应用中加载您的网页时,您会收到签名请求;您应该能够解析类似于以下内容的签名请求:

if (Request.Params["signed_request"] != null)
{
    string payload = Request.Params["signed_request"].Split('.')[1];
    var encoding = new UTF8Encoding();
    var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
    var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
    var json = encoding.GetString(base64JsonArray);
    var o = JObject.Parse(json);
    var lPid = Convert.ToString(o.SelectToken("page.id")).Replace("\"", "");
    var lLiked = Convert.ToString(o.SelectToken("page.liked")).Replace("\"", "");
    var lUserId= Convert.ToString(o.SelectToken("user_id")).Replace("\"", "");
}

您需要添加对json库的引用,以便在C#中解析已签名的请求,从http://json.codeplex.com/下载

如果您对签名请求感到厌烦,也请参考How to decode OAuth 2.0 for Canvas signed_request in C#?

答案 1 :(得分:1)

你的意思是'没有身份验证'?已签名的请求已使用您的应用密码进行签名,因此无论当前用户是否已授权您的应用,您都可以对其进行解码

{edit}我现在意识到你指的是一个名为Authentication {/ edit}

的库

如果您找到另一个库或重新实现HMAC SHA-256和base64url解码器的算法,我确信您可以在不使用该特定库的情况下执行此操作,但可能更容易使用它