[HttpPost("create-jwt")] public IActionResult CreateJwt([FromBody] CreateJwtRequest request) { var diffieHellmanA = ECDiffieHellman.Create(); diffieHellmanA.ImportSubjectPublicKeyInfo(Convert.FromBase64String(request.ServerPublicKey), out _);
var diffieHellmanB = ECDiffieHellman.Create(); diffieHellmanB.ImportPkcs8PrivateKey(Convert.FromBase64String(request.DevciePrivateKey), out _);
var derivedKey = diffieHellmanB.DeriveKeyMaterial(diffieHellmanA.PublicKey); var signingCredentials = new SigningCredentials(new SymmetricSecurityKey(derivedKey), SecurityAlgorithms.HmacSha256);
var header = new JwtHeader(signingCredentials); var payload = new JwtPayload { { JwtRegisteredClaimNames.Sub, "testuser" }, { JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString() }, { "exp", DateTimeOffset.UtcNow.AddMinutes(5).ToUnixTimeSeconds() } };
var token = new JwtSecurityToken(header, payload); var tokenHandler = new JwtSecurityTokenHandler(); string jwt = tokenHandler.WriteToken(token);
[HttpPost("validate-jwt")] public IActionResult ValidateJwt([FromBody] VaildateJwtKey request) { var tokenHandler = new JwtSecurityTokenHandler(); var jwtToken = tokenHandler.ReadJwtToken(request.Jwt);
var diffieHellmanA = ECDiffieHellman.Create(); diffieHellmanA.ImportPkcs8PrivateKey(Convert.FromBase64String(request.ServerPrivateKey), out _);
var diffieHellmanB = ECDiffieHellman.Create(); diffieHellmanB.ImportSubjectPublicKeyInfo(Convert.FromBase64String(request.DevicePublicKey), out _);
var derivedKey = diffieHellmanA.DeriveKeyMaterial(diffieHellmanB.PublicKey); var validationParameters = new TokenValidationParameters { ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey(derivedKey) };
try { var principal = tokenHandler.ValidateToken(request.Jwt, validationParameters, outvar validatedToken); var claims = principal.Claims.Select(c => new { c.Type, c.Value });