Я получаю jwt (токен доступа) с сервера OAuth. Сервер OAuth уже предоставил мне секретный, открытый ключ и самозаверяющий сертификат ЦС.Проверка jwt в java: байты ключа не могут быть указаны для подписей RSA
Я хочу написать код, который, когда я получаю jwt, могу проверить его и проверить, отправил ли этот сервер мне. Я использую следующий код для проверки моего jwt в java.
String jwt = "xxx.yyy.zzz";
//This line will throw an exception if it is not a signed JWS (as expected)
Claims claims = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(self_signed_CA_Certificate))
.parseClaimsJws(jwt).getBody();
Я получаю ошибку: Key bytes cannot be specified for RSA signatures. Please specify a PublicKey or PrivateKey instance.
Любая помощь приветствуется.
вам не требуется, чтобы создать ключ еще раз , вы пробовали с секретным ключом секретного сертификата CA. если они дали вам действительный ключ, он должен работать. в вашем коде вы пытаетесь использовать «секрет», который не является действительным ключом RSA. почему вы получаете ошибку. –
Я попробовал то, что вы предложили: Claims Claim = Jwts.parser(). SetSigningKey (self_signed_CA_Certificate) .parseClaimsJws (jwt) .getBody(); но по-прежнему получают ту же ошибку. Может быть, я должен дать кодировку? например, аналогично использованию DatatypeConverter.parseBase64Binary? – Pegah
self_signed_CA_Certificate это строковый или ключевой объект? если это строка id, то вы можете передать DatatypeConverter.parseBase64Binary –