非法base64字符2d

问题描述 投票:0回答:1

我正在构建一个 java spring boot auth 服务,该服务创建一个 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

之后我将公钥存储在资源服务器的application.properties文件中:

    jwt.publicKey = -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd
l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V
4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx
4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ
BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF
E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR
4wIDAQAB
-----END PUBLIC KEY-----

但是当我尝试解码 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();
}

我收到错误:

java.lang.IllegalArgumentException: Illegal base64 character 2d

有人能发现我在这里做错了什么吗?

干杯, 克里斯

java spring-boot encoding jwt public-key
1个回答
0
投票

我也遇到过这样的问题。我使用了以下命令,我的问题得到了解决。显然,这个问题是由于字符串中的减号字符引起的。

new String(Base64.getUrlDecoder().decode());
© www.soinside.com 2019 - 2024. All rights reserved.