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;
    }
}