using System.Security.Cryptography;
public class SignUpExternalToken
public string ClientId { get; set; }
public string UserId { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Time { get; set; }
public string CouponCode { get; set; }
public static void Main(string[] args)
string secret = "enRX5617XbJQx0ixthdYZVaqTp72CbEn";
var external = new SignUpExternalToken(){
ClientId="d5dd2e22-5a82-4f06-bac6-463ff45c2efe" ,
Email = "dmartinez+ascap005@mixgenius.com",
var externalString = JsonConvert.SerializeObject(external);
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(externalString);
var externalTokenMessage = System.Convert.ToBase64String(plainTextBytes);;
SignUpExternalToken externalToken;
var byteArray = Convert.FromBase64String(externalTokenMessage);
var jsonBack = Encoding.UTF8.GetString(byteArray);
externalToken = JsonConvert.DeserializeObject<SignUpExternalToken>(jsonBack);
externalToken.ClientId, externalToken.CouponCode, externalToken.Email, externalToken.FirstName,
externalToken.LastName, externalToken.Time, externalToken.UserId
var message = string.Join(":", tokenValues.Where(s => !string.IsNullOrEmpty(s)));
var encoding = new System.Text.UTF8Encoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new HMACSHA256(keyByte))
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
var hash = Convert.ToBase64String(hashmessage);
var encodedHash = WebUtility.UrlEncode(hash);
var encodedExternalTokenMessage = WebUtility.UrlEncode(externalTokenMessage);
Console.WriteLine("************* Token *************");
Console.WriteLine(encodedExternalTokenMessage);
Console.WriteLine("************* Signature *************");
Console.WriteLine(encodedHash);
Console.WriteLine("************* copy paste at the end of url *************");
Console.WriteLine("?t="+encodedExternalTokenMessage+"&s="+encodedHash);