Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // In Default.aspx:
- <iframe src="http://www.facebook.com/plugins/registration.php?
- client_id=your_client_id&
- redirect_uri=http%3A%2F%2Fmydomain.com%2FCallback.aspx&
- fields=name,birthday,gender,location,email"
- scrolling="auto"
- frameborder="no"
- style="border:none"
- allowTransparency="true"
- width="100%"
- height="330">
- </iframe>
- // In Callback.aspx.cs:
- using System;
- using Newtonsoft.Json.Linq;
- using System.Text;
- using System.Security.Cryptography;
- public partial class Callback: System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- var signed_request = Request.Form["signed_request"];
- var obj = ParseSignedRequest(signed_request, "your_secret_key");
- var name = obj["name"].Value<string>();
- var birthday = obj["birthday"].Value<DateTime>();
- var location = obj["location"]["name"].Value<string>();
- var gender = obj["gender"].Value<string>();
- var email = obj["gender"].Value<string>();
- // Save values to database...
- }
- private JToken ParseSignedRequest(string signedRequestValue, string secret_key)
- {
- string[] signedRequestSplit = signedRequestValue.Split('.');
- string expectedSignature = signedRequestSplit[0];
- string payload = signedRequestSplit[1];
- // Attempt to get same hash
- var encoding = new UTF8Encoding();
- var hmac = SignWithHmac(encoding.GetBytes(payload), encoding.GetBytes(secret_key));
- var hmacBase64 = ToUrlBase64String(hmac);
- if (hmacBase64 != ReplaceSpecialCharactersInSignedRequest(expectedSignature))
- return null;
- var decodedJson = ReplaceSpecialCharactersInSignedRequest(payload);
- var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
- var data = JObject.Parse(encoding.GetString(base64JsonArray));
- if (data.HasValues && data["registration"] != null)
- {
- return data["registration"];
- }
- else
- return null;
- }
- private static string ReplaceSpecialCharactersInSignedRequest(string str)
- {
- return str.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
- }
- private static byte[] SignWithHmac(byte[] dataToSign, byte[] keyBody)
- {
- using (var hmacAlgorithm = new HMACSHA256(keyBody))
- {
- hmacAlgorithm.ComputeHash(dataToSign);
- return hmacAlgorithm.Hash;
- }
- }
- private static string ToUrlBase64String(byte[] Input)
- {
- return ReplaceSpecialCharactersInSignedRequest(Convert.ToBase64String(Input));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement