JWTHelper: public String generateToken(String payload, Key key) { return builderFactory .createJwtBuilder() .setPayload(payload) .setHeaderParam("typ", "JWT") .setHeaderParam("alg", signatureAlgorithm.getValue()) .signWith(key, signatureAlgorithm) .compact(); } Caller statement: OAuthService String strPrivateKey = encryptionUtilities.aesDecrypt(toolConfiguration.getPlatformPrivateKey(), aesSecretKey); PrivateKey privateKey = encryptionUtilities.string2PrivateKey(strPrivateKey); long startTime = System.currentTimeMillis(); String accessToken = jwtHelper.generateToken(payload, privateKey, tokenExpirationInMilliSeconds); LOGGER.info("Time spend in getOauthToken jwtHelper.generateToken {}", System.currentTimeMillis() - startTime); EncryptionUtil.java public PrivateKey string2PrivateKey(String privateKeyString) { long startTime = System.currentTimeMillis(); try { KeyFactory kf = KeyFactory.getInstance(ServiceConstants.RSA); PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyString)); PrivateKey privateKey = kf.generatePrivate(keySpecPKCS8); LOGGER.info("Time spend in string2PrivateKey {}", System.currentTimeMillis() - startTime); return privateKey; } catch (IllegalArgumentException | InvalidKeySpecException | NoSuchAlgorithmException e) { LOGGER.error(e.getMessage(), e); return null; } }