我正在尝试编写一些用于Facebook身份验证的php示例代码的c#版本,我在这里找到:http://developers.facebook.com/docs/guides/web/示例中的php是:
define('YOUR_APP_ID', 'your app id ');
define('YOUR_APP_SECRET', 'your app secret');
function get_facebook_cookie($app_id, $app_secret) {
$args = array();
parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
ksort($args);
$payload = '';
foreach ($args as $key => $value) {
if ($key != 'sig') {
$payload .= $key . '=' . $value;
}
}
if (md5($payload . $app_secret) != $args['sig']) {
return null;
}
return $args;
}
我的C#版本是:
private bool CheckFacebookAuthentication()
{
var appSecret = "??????????";
var appId = "?????";
var cookie = Request.Cookies["fbs_" + appId];
var payload = "";
foreach (var key in cookie.Values.AllKeys.OrderBy(x => x))
{
if (key != "sig")
{
payload += key.Trim("\"".ToCharArray()) + "=" + cookie.Values[key].Trim("\"".ToCharArray());
}
}
if (cookie.Values["sig"] == FormsAuthentication.HashPasswordForStoringInConfigFile(payload + appSecret, "md5"))
{
return true;
}
return false;
}
我很欣赏我的c#版本与php没有完全相同的东西,即它只是检查签名是否有效并返回一个指示这个的布尔值;而如果它有效,则php返回一个数组。
但我遇到的问题是我的c#版本没有验证我希望有效的cookie。我对php的体验是有限的,所以我希望在编写c#版本时我误解了php的例子。
我的c#解释这个php有什么明显的错误吗?
答案 0 :(得分:2)
是的,这是正确的翻译,但您可以用"\"".ToCharArray()
替换'\"'
此外,还有一个用C#写的非常好的SDK:http://facebooksdk.codeplex.com/
如果您想查看更多示例代码,那就是这样。
我使用Facebook的Graph API和C#工作了很多,所以如果有任何具体需要帮助,请随时问:)
答案 1 :(得分:1)
我会说这不是相应的翻译。据我所知,它归结为这一行:
parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
在PHP中,通过删除任何'\'或'“'字符(检查php手册中的trim(...))和然后解析来修剪cookie字符串,而在C#中你是目前正在逐个修剪每个值和密钥,请尝试删除它。