Недопустимый символ base64 2d ⇐ JAVA
-
Anonymous
Недопустимый символ base64 2d
Я создаю службу аутентификации Java Spring Boot, которая создает jwt, и службу ресурсов, которая впоследствии использует этот jwt.
Поэтому я создал пару открытого и закрытого ключей, используя:
keytool -genkeypair -alias myalias -keyalg RSA -keypass пароль1 -keystore myclient.jks -storepass пароль1 Затем я экспортировал открытый ключ, используя:
keytool -list -rfc --keystore myclient.jks | openssl x509 -inform pem -pubkey После этого я сохранил открытый ключ в файле application.properties на сервере ресурсов:
jwt.publicKey = -----НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ ----- МИИБИДЖАНBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V 4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx 4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR 4wИДАКАБ -----КОНЕЦ ПУБЛИЧНОГО КЛЮЧА----- Однако, когда я затем пытаюсь декодировать JWT:
@Value("${jwt.publicKey}") частная строка publicKey; общественные утверждения decodeJWT (String jwt) { KeyFactory кф; ключ PublicKey; пытаться{ kf = KeyFactory.getInstance("RSA"); X509EncodedKeySpec pubKeySpecX509EncodedKeySpec = новый X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); ключ = kf.generatePublic(pubKeySpecX509EncodedKeySpec); } catch (Исключение е) { throw new RuntimeException("Не удалось сгенерировать открытый ключ", e); } //Эта строка вызовет исключение, если это не подписанный JWS (как и ожидалось) вернуть Jwts.parser() .setSigningKey(ключ) .parseClaimsJws(jwt).getBody(); } Я получаю сообщение об ошибке:
java.lang.IllegalArgumentException: недопустимый символ base64 2d Может ли кто-нибудь заметить, что я здесь делаю не так?
Удачи! Крис
Я создаю службу аутентификации Java Spring Boot, которая создает jwt, и службу ресурсов, которая впоследствии использует этот jwt.
Поэтому я создал пару открытого и закрытого ключей, используя:
keytool -genkeypair -alias myalias -keyalg RSA -keypass пароль1 -keystore myclient.jks -storepass пароль1 Затем я экспортировал открытый ключ, используя:
keytool -list -rfc --keystore myclient.jks | openssl x509 -inform pem -pubkey После этого я сохранил открытый ключ в файле application.properties на сервере ресурсов:
jwt.publicKey = -----НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ ----- МИИБИДЖАНBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V 4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx 4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR 4wИДАКАБ -----КОНЕЦ ПУБЛИЧНОГО КЛЮЧА----- Однако, когда я затем пытаюсь декодировать JWT:
@Value("${jwt.publicKey}") частная строка publicKey; общественные утверждения decodeJWT (String jwt) { KeyFactory кф; ключ PublicKey; пытаться{ kf = KeyFactory.getInstance("RSA"); X509EncodedKeySpec pubKeySpecX509EncodedKeySpec = новый X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); ключ = kf.generatePublic(pubKeySpecX509EncodedKeySpec); } catch (Исключение е) { throw new RuntimeException("Не удалось сгенерировать открытый ключ", e); } //Эта строка вызовет исключение, если это не подписанный JWS (как и ожидалось) вернуть Jwts.parser() .setSigningKey(ключ) .parseClaimsJws(jwt).getBody(); } Я получаю сообщение об ошибке:
java.lang.IllegalArgumentException: недопустимый символ base64 2d Может ли кто-нибудь заметить, что я здесь делаю не так?
Удачи! Крис
Мобильная версия