我正在尝试创建一个新的RsaVerifier来检查公钥:
JwtHelper.decodeAndVerify(token, verifier);
我相信它是一个有效的公钥。我正在从浏览器中正确复制它。它确实以返回字符开头。它实际上有几个地方:
-----BEGIN PUBLIC KEY-----\nMIIBI.....
创建RsaVerifier时失败。
SignatureVerifier verifier = null;
if (key.startsWith("-----BEGIN PUBLIC KEY-----")) {
logger.log("Trying to get key verifier...");
verifier = new RsaVerifier(key); //FAILS HERE
...
具体来说,它在RsaKeyHelper的这个片段的最后一行失败了:
private static Pattern PEM_DATA = Pattern.compile("-----BEGIN (.*)-----(.*)-----END (.*)-----", Pattern.DOTALL);
static KeyPair parseKeyPair(String pemData) {
Matcher m = PEM_DATA.matcher(pemData.trim());
if (!m.matches()) {
throw new IllegalArgumentException("String is not PEM encoded data");
}
String type = m.group(1);
final byte[] content = b64Decode(utf8Encode(m.group(2))); //FAILS HERE
有错误:
Exception validating token :
org.springframework.security.jwt.codec.InvalidBase64CharacterException: Bad
Base64 input character decimal 92 in array position 0
我知道小数92是正斜杠,事实上我在位置0有一个。但是,我已尝试删除返回字符,但它并未将其识别为有效字符。这是RsaKeyHelper类的链接:
https://www.programcreek.com/java-api-examples/index.php?source_dir=spring-security-oauth-master/spring-security-jwt/src/main/java/org/springframework/security/jwt/crypto/sign/RsaKeyHelper.java
我正在努力弄清楚如何将此密钥作为一个被接受的字符串传递。