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 HS256Algorithm(Encoding.ASCII.GetBytes(secret));
var encoder = new JwtEncoder(securityKey);
var payload = new PayLoad{Foo = "123", Bar = "456"};
var token = encoder.Encode(payload, exp);
TestJWTDecode(token, secret, count);
TestLitJWTDecode(token, 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, ValidateIssuer = false, 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:" + sw.ElapsedMilliseconds);