非法基本64字符2D
我正在构建Java Spring Boot Auth Service,该服务创建了JWT和一个使用JWT的资源服务。
我使用以下方式创建了一个公共/私钥对:
keytool -genkeypair -alias myalias -keyalg RSA -keypass password1 -keystore myclient.jks -storepass password1
然后,我使用以下方式导出了公共密钥:
keytool -list -rfc --keystore myclient.jks | openssl x509 -inform pem -pubkey
将公共密钥存储在应用程序中。
jwt.publicKey = -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd
l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V
4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx
4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ
BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF
E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR
4wIDAQAB
-----END PUBLIC KEY-----
之后我
@Value("${jwt.publicKey}")
private String publicKey;
public Claims decodeJWT(String jwt) {
KeyFactory kf;
PublicKey key;
try{
kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec pubKeySpecX509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
key = kf.generatePublic(pubKeySpecX509EncodedKeySpec);
} catch (Exception e) {
throw new RuntimeException("Failed to generate Public Key", e);
}
//This line will throw an exception if it is not a signed JWS (as expected)
return Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(jwt).getBody();
}
因此, :
java.lang.IllegalArgumentException: Illegal base64 character 2d
谁能在这里发现我做错了什么?
干杯, 克里斯
I am building a java spring boot auth service that creates a jwt and a resource service that uses that jwt afterwards.
Therefore I created a public/private key pair using:
keytool -genkeypair -alias myalias -keyalg RSA -keypass password1 -keystore myclient.jks -storepass password1
I then exported the public key using:
keytool -list -rfc --keystore myclient.jks | openssl x509 -inform pem -pubkey
Afterwards I stored the public key in the application.properties file in the resource server:
jwt.publicKey = -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd
l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V
4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx
4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ
BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF
E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR
4wIDAQAB
-----END PUBLIC KEY-----
However when I then try to decode the JWT:
@Value("${jwt.publicKey}")
private String publicKey;
public Claims decodeJWT(String jwt) {
KeyFactory kf;
PublicKey key;
try{
kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec pubKeySpecX509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
key = kf.generatePublic(pubKeySpecX509EncodedKeySpec);
} catch (Exception e) {
throw new RuntimeException("Failed to generate Public Key", e);
}
//This line will throw an exception if it is not a signed JWS (as expected)
return Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(jwt).getBody();
}
I get an error:
java.lang.IllegalArgumentException: Illegal base64 character 2d
can anyone spot what I'm doing wrong here?
Cheers,
Kris
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我有一个问题。我使用以下命令,解决了我的问题。显然,此问题是由于字符串中的负字符而发生的。
I had such a problem. I used the following command and my problem was solved. Apparently, this problem occurs because of the minus character in the string.
your public key should not have Illegal character like '-' '\n' ...
your public key is
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kdl+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJBSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpFE0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR4wIDAQAB
your public key should not have Illegal character like '-' '\n' ...
your public key is
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kdl+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJBSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpFE0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR4wIDAQAB