asp.net-mvc-2 – 阅读OAuth2.0 Signed_Request Facebook注册C#M
发布时间:2020-12-16 03:33:17 所属栏目:asp.Net 来源:网络整理
导读:我的问题非常相似 this,但我想我需要更进一步. Facebook表示“数据作为已签名的请求传递给您的应用程序.igned_request参数是一种简单的方法,可确保您收到的数据是Facebook发送的实际数据.” 用户登录我的asp c#MVC站点并单击“注册”后,redirect-url为http:/
我的问题非常相似
this,但我想我需要更进一步.
Facebook表示“数据作为已签名的请求传递给您的应用程序.igned_request参数是一种简单的方法,可确保您收到的数据是Facebook发送的实际数据.” 用户登录我的asp c#MVC站点并单击“注册”后,redirect-url为http://site/account/register.此时(发布到帐户/注册控件),我想使用签名请求收集用户的信息这样我就可以在本地注册我的网站.我无法弄清楚如何访问facebook提供的数据. $data = json_decode(base64_url_decode($payload),true); C#中的等价物是什么? Facebook在帖子中传递了什么类型的变量/数据?我如何访问“$payload”? [HttpPost] public ActionResult RegisterFacebook(RegisterFacebookModel model) { Facebook.FacebookSignedRequest sr = Facebook.FacebookSignedRequest.Parse("secret",model.signed_request); return View(model); } 解决方法
这是我们在Facebook C#SDK中使用的代码.如果您使用我们的sdk,则无需手动执行此操作,但如果您需要在此处自行执行此操作,则:
/// <summary> /// Parses the signed request string. /// </summary> /// <param name="signedRequestValue">The encoded signed request value.</param> /// <returns>The valid signed request.</returns> internal protected FacebookSignedRequest ParseSignedRequest(string signedRequestValue) { Contract.Requires(!String.IsNullOrEmpty(signedRequestValue)); Contract.Requires(signedRequestValue.Contains("."),Properties.Resources.InvalidSignedRequest); string[] parts = signedRequestValue.Split('.'); var encodedValue = parts[0]; if (String.IsNullOrEmpty(encodedValue)) { throw new InvalidOperationException(Properties.Resources.InvalidSignedRequest); } var sig = Base64UrlDecode(encodedValue); var payload = parts[1]; using (var cryto = new System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(this.AppSecret))) { var hash = Convert.ToBase64String(cryto.ComputeHash(Encoding.UTF8.GetBytes(payload))); var hashDecoded = Base64UrlDecode(hash); if (hashDecoded != sig) { return null; } } var payloadJson = Encoding.UTF8.GetString(Convert.FromBase64String(Base64UrlDecode(payload))); var data = (IDictionary<string,object>)JsonSerializer.DeserializeObject(payloadJson); var signedRequest = new FacebookSignedRequest(); foreach (var keyValue in data) { signedRequest.Dictionary.Add(keyValue.Key,keyValue.Value.ToString()); } return signedRequest; } /// <summary> /// Converts the base 64 url encoded string to standard base 64 encoding. /// </summary> /// <param name="encodedValue">The encoded value.</param> /// <returns>The base 64 string.</returns> private static string Base64UrlDecode(string encodedValue) { Contract.Requires(!String.IsNullOrEmpty(encodedValue)); encodedValue = encodedValue.Replace('+','-').Replace('/','_').Trim(); int pad = encodedValue.Length % 4; if (pad > 0) { pad = 4 - pad; } encodedValue = encodedValue.PadRight(encodedValue.Length + pad,'='); return encodedValue; } 你可以在这里找到完整的源代码:http://facebooksdk.codeplex.com/SourceControl/changeset/view/f8109846cba5#Source%2fFacebook%2fFacebookApp.cs (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- asp.net-mvc – 在ASP.NET MVC中使用线程设置当前
- asp.net-mvc – Html.BeginForm()和ajax.beginfo
- asp.net – 扩展方法必须在非泛型静态类中定义
- asp.net-web-api – Web API / JsonMediaTypeFor
- asp.net – 如何向IIS添加反射权限或将其添加到w
- ASP.NET自定义控件:何时调用LoadPostData()?
- iis-7 – 主域和可信域之间的信任关系失败
- 数组 – 如何在经典asp中拆分字符串
- asp.net-mvc – 限制每个动作的HTTP动词
- asp.net-mvc – 在MVC中显示来自IMAGE对象的图像
热点阅读