using System.Collections.Generic;
public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
public static void Main()
var now = DateTime.UtcNow;
var secretClear = "MzQ0NjdDM0VFMzFBNDc0QzlCMEQ2NEJDMDkyNzY4Q0U4NEU3MjlFMDcwNTk0QzZBQTk3NTQ0QTZCQjEyM0I3RA";
var encodedSecret = GetSecretKeyAsBytes(secretClear);
string token=Jose.JWT.Encode(GetPayload(now), encodedSecret, JwsAlgorithm.HS512);
Console.WriteLine("nbf = " + GetNbf(now));
Console.WriteLine("exp = " + GetExp(now));
Console.WriteLine("token = " + token);
private static Dictionary<string, object> GetPayload(DateTime utcNow)
var exten = new {key1 = "value", CustId = "A100003280"} ;
var payload = new Dictionary<string, object>()
{ "System", "eTrustWeb" },
{ "Product", "CheckMMAUser" },
{ "UTCDateTime", "20220613025111" },
{ "UId", "2024d313-6f1f-4ca9-b27b-2d5167f66413"},
{ "Extension", Newtonsoft.Json.JsonConvert.SerializeObject(exten)}
private static byte[] GetSecretKeyAsBytes(string secret)
return Encoding.UTF8.GetBytes(secret);
public static string SecretAsBase64Encoded(string secret)
return Convert.ToBase64String(GetSecretKeyAsBytes(secret));
private static long GetNbf(DateTime utcNow) { return GetEpochDateTimeAsInt(utcNow); }
private static long GetExp(DateTime utcNow)
var tokenValidFor = TimeSpan.FromDays(200);
var expiry = utcNow.Add(tokenValidFor);
return GetEpochDateTimeAsInt(expiry);
public static long GetEpochDateTimeAsInt(DateTime datetime)
DateTime dateTime = datetime;
if (datetime.Kind != DateTimeKind.Utc)
dateTime = datetime.ToUniversalTime();
if (dateTime.ToUniversalTime() <= UnixEpoch)
return (long)(dateTime - UnixEpoch).TotalSeconds;