Да, это дубликат.Но так как я потратил более 1 часа на его поиск на SO сайте.На основании этого ответа и bouncycastle PEMParser.Спасибо, @ dave_thompson_085
Чтобы создать закрытые и открытые ключи:
- openssl genrsa -out private.key 4096
- openssl rsa -pubout -in private.key -out public.key
, затем с java
-
final PrivateKey pKey = getPrivateKey();
final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.RS256; // private key to sign / public to confrim a sign
final JwtBuilder builder = Jwts.builder().setId("id1")
.setIssuedAt(now)
.setSubject(subject)
.setIssuer(issuer)
.setAudience("api")
.addClaims(Map.of(
"user_name", "test user",
"authorities", List.of("ROLE_USER"),
"scope", List.of("read", "write"),
"client_id", "test-client"
)
) .signWith(signatureAlgorithm, pKey);
String jwt = builder.compact();
где:
private static PrivateKey getPrivateKey() throws Exception {
val path = TestUtils.class.getResource("/").getPath();
final PEMParser pemParser = new PEMParser(new FileReader(path + "/private.key"));
final JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
final PEMKeyPair object = (PEMKeyPair) pemParser.readObject();
final KeyPair kp = converter.getKeyPair(object);
final PrivateKey pKey = kp.getPrivate();
return pKey;
}
Затем для проверки вставьте: сгенерировано jwt
в https://jwt.io/ (или любой другой инструмент), чтобы просмотреть / проверить содержимое.
поместите туда контент public.key для проверки подписи.Чтобы увидеть, что все зеленое.