private static String createJWT(String id, String issuer, String subject, long ttlMillis) throws Exception{ //The JWT signature algorithm we will be using to sign the token SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.ES256; long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); //We will sign our JWT with our ApiKey secret byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("-----BEGIN PRIVATE KEY-----" + "MIGTAsvdfbghtjt7877thbfnhtjnQQgJ0rty4umJhdYywE+L54YO0yp+T/JY5ajhqn1hUps6JqgCgYIKoZIzj0DAQehRANCAATRR3JOoF9nh7iCESC7/4Yv9DZ4juKZfEuoAVGBtdbh9bQrxzGGAmEQg8M/x3IHZrIvgc2+yfomkSApnTQlKrkR" + "-----END PRIVATE KEY-----"); Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); //Let's set the JWT Claims JwtBuilder builder = Jwts.builder().setId(id) .setIssuedAt(now) .setSubject(subject) .setIssuer(issuer) .signWith(signatureAlgorithm, signingKey); //if it has been specified, let's add the expiration if (ttlMillis >= 0) { long expMillis = nowMillis + ttlMillis; Date exp = new Date(expMillis); builder.setExpiration(exp); } //Builds the JWT and serializes it to a compact, URL-safe string return builder.compact(); } 

When generating a token, I get the error:

 Exception in thread "main" java.lang.IllegalArgumentException: Elliptic Curve signatures must be computed using an ECPrivateKey. The specified key of type javax.crypto.spec.SecretKeySpec is not an ECPrivateKey. at io.jsonwebtoken.impl.crypto.EllipticCurveSigner.<init>(EllipticCurveSigner.java:34) at io.jsonwebtoken.impl.crypto.DefaultSignerFactory.createSigner(DefaultSignerFactory.java:47) at io.jsonwebtoken.impl.crypto.DefaultJwtSigner.<init>(DefaultJwtSigner.java:37) at io.jsonwebtoken.impl.crypto.DefaultJwtSigner.<init>(DefaultJwtSigner.java:32) at io.jsonwebtoken.impl.DefaultJwtBuilder.createSigner(DefaultJwtBuilder.java:339) at io.jsonwebtoken.impl.DefaultJwtBuilder.compact(DefaultJwtBuilder.java:321) 

    1 answer 1

    Perhaps you need to remove comments here?

     byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("-----BEGIN PRIVATE KEY-----" + "MIGTAsvdfbghtjt7877thbfnhtjnQQgJ0rty4umJhdYywE+L54YO0yp+T/JY5ajhqn1hUps6JqgCgYIKoZIzj0DAQehRANCAATRR3JOoF9nh7iCESC7/4Yv9DZ4juKZfEuoAVGBtdbh9bQrxzGGAmEQg8M/x3IHZrIvgc2+yfomkSApnTQlKrkR" + "-----END PRIVATE KEY-----"); / 4Yv9DZ4juKZfEuoAVGBtdbh9bQrxzGGAmEQg8M / x3IHZrIvgc2 + yfomkSApnTQlKrkR" + byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("-----BEGIN PRIVATE KEY-----" + "MIGTAsvdfbghtjt7877thbfnhtjnQQgJ0rty4umJhdYywE+L54YO0yp+T/JY5ajhqn1hUps6JqgCgYIKoZIzj0DAQehRANCAATRR3JOoF9nh7iCESC7/4Yv9DZ4juKZfEuoAVGBtdbh9bQrxzGGAmEQg8M/x3IHZrIvgc2+yfomkSApnTQlKrkR" + "-----END PRIVATE KEY-----"); 

    And leave only the key?

     byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("MIGTAsvdfbghtjt7877thbfnhtjnQQgJ0rty4umJhdYywE+L54YO0yp+T/JY5ajhqn1hUps6JqgCgYIKoZIzj0DAQehRANCAATRR3JOoF9nh7iCESC7/4Yv9DZ4juKZfEuoAVGBtdbh9bQrxzGGAmEQg8M/x3IHZrIvgc2+yfomkSApnTQlKrkR");