Create and Sign a JSON Web Token (JWT) with Java
import java.io.FileReader;
import java.io.IOException;
import java.security.PrivateKey;
import java.util.Date;
import java.util.UUID;
import org.apache.cxf.rs.security.jose.jwa.SignatureAlgorithm;
import org.apache.cxf.rs.security.jose.jws.JwsHeaders;
import org.apache.cxf.rs.security.jose.jws.JwsJwtCompactProducer;
import org.apache.cxf.rs.security.jose.jwt.JwtClaims;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
public class SignToken {
public static void main(String[] args) {
PEMParser reader = null;
try {
// Reading a PEM encoded private key
reader = new PEMParser(
new FileReader("PRIVATE_KEY_PEM_FILE_PATH"));
PEMKeyPair keys = (PEMKeyPair) reader.readObject();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PrivateKey privateKeyJava = converter.getPrivateKey(keys.getPrivateKeyInfo());
JwsHeaders header = new JwsHeaders(SignatureAlgorithm.RS256);
JwtClaims body = new JwtClaims();
Date now = new Date();
body.setAudience("https://AAAS_PLATFORM/idp/YOUR_TENANT/authn/token");
body.setExpiryTime(now.getTime() + 60 * 60 * 1000);
body.setIssuer("YOUR_CLIENTID");
body.setTokenId(UUID.randomUUID().toString());
body.setSubject("YOUR_CLIENTID");
body.setNotBefore(now.getTime() - 30);
body.setIssuedAt(now.getTime());
JwsJwtCompactProducer producer = new JwsJwtCompactProducer(header, body);
// Prints the token ready to be sent to the Authentication Service !
System.out.println(producer.signWith(privateKeyJava));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
}
}