using Microsoft.AspNetCore.DataProtection;
public static void Main()
var dataProtectionProvider = DataProtectionProvider.Create("Erpa.Pay")
.CreateProtector("Erpa.Pay.Cryptography")
.ToTimeLimitedDataProtector();
var sessionToken = new SessionToken{
CreatedAt = DateTime.UtcNow,
var sessionTokenJson = JsonConvert.SerializeObject(sessionToken, Newtonsoft.Json.Formatting.Indented);
Console.WriteLine("Session token serialized to json: \n"+sessionTokenJson + "\n");
var protectedToken = dataProtectionProvider.Protect(sessionTokenJson);
Console.WriteLine("PROTECTED:" + protectedToken + "\n");
var unprotectedTokenJson = dataProtectionProvider.Unprotect(protectedToken);
Console.WriteLine($"UNPROTECTD: \n{unprotectedTokenJson}\n");
var session = JsonConvert.DeserializeObject<SessionToken>(unprotectedTokenJson);
Console.WriteLine("Back to SessionToken\n");
.Select(x => $"{x.Name}: {x.GetValue(session)}")
.ForEach(Console.WriteLine);
public class SessionToken
public long Id { get; set; }
public Guid Token { get; set; }
public DateTime? ExpiredAt { get; set; }
public bool IsActive { get; set; }
public long MembershipId { get; set; }
public long DeviceId { get; set; }
public DateTime CreatedAt { get; set; }
public string IPAddress { get; set; }