JWE Generation & Verification in .NET 6
This code is the result of a chat session with AI using codegemma:7b model.
Generate JWE
public static string GenerateJweToken(string issuer, string audience, SymmetricSecurityKey key, SigningCredentials credentials)
{
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, "user_id"),
new Claim(JwtRegisteredClaimNames.Name, "John Doe"),
new Claim(JwtRegisteredClaimNames.Email, "john.doe@example.com")
};
var token = new JwtSecurityToken(
issuer: issuer,
audience: audience,
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials
);
// Create the JWE token
var handler = new JweSecurityTokenHandler();
var jweHeader = new JweHeader(new Dictionary<string, string> { { "alg", "dir" }, { "enc", "A256GCM" } });
var jweToken = handler.EncryptToken(token, key, jweHeader, encryptionAlgorithm: EncryptionAlgorithm.A256GCM);
return jweToken;
}
Verify JWE
public static bool ValidateJweToken(string jweToken, string issuer, SymmetricSecurityKey key)
{
try
{
var handler = new JweSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
ValidIssuer = issuer,
ValidateIssuerSigningKey = true,
IssuerSigningKey = key,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
SecurityToken validatedToken;
handler.ValidateToken(jweToken, validationParameters, out validatedToken);
return true;
}
catch (Exception ex)
{
Console.WriteLine($"JWE validation failed: {ex.Message}");
return false;
}
}