Для создания JWT токена и подписи его приватным сертификатом по алгоритму RSA, вам понадобится использовать библиотеку, поддерживающую работу с JWT и работу с RSA ключами. В примере ниже предполагается использование библиотеки Nimbus JOSE + JWT для работы с JWT и Bouncy Castle для работы с RSA ключами.
1. Начнем с создания приватного ключа RSA:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); // указываем размер ключа KeyPair keyPair = keyPairGenerator.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate();
2. Затем создаем JWT токен и подписываем его приватным ключом:
String issuer = "your_issuer"; String subject = "subject"; List<String> audience = Arrays.asList("audience1", "audience2"); Date now = new Date(); Date expiration = new Date(now.getTime() + 3600000); // устанавливаем срок действия токена на 1 час JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() .issuer(issuer) .subject(subject) .audience(audience) .issueTime(now) .expirationTime(expiration) .build(); JWSSigner signer = new RSASSASigner(privateKey); SignedJWT signedJWT = new SignedJWT( new JWSHeader.Builder(JWSAlgorithm.RS256).keyID("key-id").build(), claimsSet ); signedJWT.sign(signer); String jwtToken = signedJWT.serialize();
3. В результате получаем JWT токен, подписанный приватным ключом по алгоритму RSA256. Теперь этот токен можно использовать для аутентификации и авторизации.
Обратите внимание, что в данном примере используется синхронный подход подписи JWT токена. Кроме того, для использования библиотеки Nimbus JOSE + JWT и Bouncy Castle необходимо добавить соответствующие зависимости в проект.
Этот пример показывает основные шаги по созданию JWT токена и подписи его приватным RSA ключом. Не забудьте также сохранить публичный ключ для последующей верификации подписи JWT токена.