using System.Diagnostics;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;
public static class Program
public string Foo { get; set; }
public string Bar { get; set; }
public static void Main()
Console.WriteLine("Count:" + count);
var exp = DateTime.Now.AddSeconds(100000);
var claims = Array.Empty<Claim>();
var secret = "fze@Cjq]MQsN4@:e.p??9;nzCAms(L,-";
var securityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secret));
var signingCredentials = new SigningCredentials(
SecurityAlgorithms.HmacSha256Signature
var token = new JwtSecurityToken(
signingCredentials: signingCredentials,
var tokenHandler = new JwtSecurityTokenHandler();
var tokenValidationParameters = new TokenValidationParameters
ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey,
ValidateAudience = false,
ClockSkew = TimeSpan.Zero
var tokenString = tokenHandler.WriteToken(token);
TestJWTDecode(tokenString, secret, count);
TestLitJWTDecode(tokenString, secret, count);
private static void TestJWTDecode(string token, string secret, int count)
var tokenHandler = new JwtSecurityTokenHandler();
var securityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secret));
var tokenValidationParameters = new TokenValidationParameters
ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey,
ValidateAudience = false,
ClockSkew = TimeSpan.Zero
var sw = Stopwatch.StartNew();
for (var i = 0; i < count; ++i)
tokenHandler.ValidateToken(token, tokenValidationParameters, out var o);
Console.WriteLine("MS-JWT Decode:" + sw.ElapsedMilliseconds);
private static void TestLitJWTDecode(string token, string secret, int count)
var securityKey = new HS256Algorithm(Encoding.ASCII.GetBytes(secret));
var decoder = new JwtDecoder(securityKey);
var sw = Stopwatch.StartNew();
for (var i = 0; i < count; ++i)
var result = decoder.TryDecode<PayLoad>(token, out var payload);
Console.WriteLine("LitJWT Decode:" + result);
Console.WriteLine("LitJWT Decode:" + sw.ElapsedMilliseconds);