Согласно Java 12 спецификациям безопасности здесь должна поддерживаться схема подписи RSASSA-PSS (фактически начиная с Java 11). Однако если я попытаюсь использовать сигнатуру с алгоритмом PS256 в моем JWT, например, с помощью библиотеки nimbus jose + jwt , то она не будет работать, если я не использую BouncyCastle.
val signer = RSASSASigner(signKey)
val jwsObject = JWSObject(
JWSHeader.Builder(JWSAlgorithm.PS256) // PS256 gives error; RS256 will work
.keyID(signKeyId)
.build(),
Payload(json)
jwsObject.sign(signer)
Это выдает ошибку:
java.security.NoSuchAlgorithmException: SHA256withRSAandMGF1 Signature not available
И действительно JCASupport.isSupported(JWSAlgorithm.PS256)
ложно
Если я включу BouncyCastle, то это сработает:
Security.addProvider(BouncyCastleProviderSingleton.getInstance())
JCASupport.isSupported(JWSAlgorithm.PS256) == true
Я бы подумал, что BouncyCastle больше не нужен в Java 12 (я на самом деле использую Kotlin 1.3 с Java 12 и Spring Boot 2.2 и com.nimbusds 8, если быть точным). Я хотел бы быть независимым от BouncyCastle.
Что мне не хватает?