using System.Security.Cryptography;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;
using Microsoft.IdentityModel.Logging;
public static void Main()
string userId = "abcdefg";
var key = Encoding.ASCII.GetBytes("TransCosmosSecretKey");
var base64SecretKey = Encoding.ASCII.GetBytes(Convert.ToBase64String(key));
IdentityModelEventSource.ShowPII = true;
var token = Encoded(userId, base64SecretKey);
Console.Write("Token : " + token);
public static string Encoded(string userId, byte[] secretKey)
var securityKey = new SymmetricSecurityKey(secretKey);
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var header = new JwtHeader(credentials);
var payload = new JwtPayload
var secToken = new JwtSecurityToken(header, payload);
var handler = new JwtSecurityTokenHandler();
var tokenString = handler.WriteToken(secToken);
public static string GenerateKey()
var secret = new HMACSHA256();
var symmetricKey = Convert.ToBase64String(secret.Key);
public static string GenerateToken(string userId, string firstname, string lastname, string email, int expireMinutes = 5, string overrideKey = "")
if(!string.IsNullOrWhiteSpace(overrideKey))
var symmetricKey = Encoding.UTF8.GetBytes(key);
var tokenHandler = new JwtSecurityTokenHandler();
var now = DateTime.UtcNow;
var tokenDescriptor = new SecurityTokenDescriptor
Subject = new ClaimsIdentity(new[]
new Claim("first_name", firstname),
new Claim("last_name", lastname),
new Claim("member_id", userId)
Expires = now.AddMinutes(expireMinutes),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(symmetricKey), SecurityAlgorithms.HmacSha256Signature)
var stoken = tokenHandler.CreateToken(tokenDescriptor);
var token = tokenHandler.WriteToken(stoken);
public static string Encode(byte[] data)
throw new ArgumentNullException("data");
return Convert.ToBase64String(data).TrimEnd('=').Replace('+', '-').Replace('/', '_');
public static byte[] Decode(string text)
throw new ArgumentNullException("text");
return Convert.FromBase64String(Pad(text.Replace('-', '+').Replace('_', '/')));
private static string Pad(string text)
var padding = 3 - ((text.Length + 3) % 4);
return text + new string('=', padding);