Android - Создать публичный c ключевой объект для декодирования JWT - PullRequest
1 голос
/ 07 марта 2020

My PHP отправляет JWT (RS256) и ключ publi c в мое приложение android. Я успешно извлекаю их.

С помощью Android я пытаюсь дешифровать JWT с помощью клавиши publi c, но получаю ошибку:

java.lang.IllegalArgumentException: Key bytes can only be specified for HMAC signatures. Please specify a PublicKey or PrivateKey instance.

Мой код:

Jws<Claims> jws = null;
try {
    jws = Jwts.parserBuilder().setSigningKey(pubkey).build().parseClaimsJws(jwt);
} catch (JwtException ex) {
}

The JWT:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJjb21wYWdub24ub3JnIiwiYXVkIjoiY29tcGFnbm9uLm9yZyIsImlhdCI6MTM1Njk5OTUyNCwibmJmIjoxMzU3MDAwMDAwLCJ1c2VyX2lkIjo0M30.ecAQDJ1i5ZKVTLVgxBphRgpdCeieXY_J3yCR5rBk-TOVeZAMGVywUmK8bE8F8MQ5-4ua6utKppbku8UMdqqrk7XM8tOT7A6vRyL6yDHYHOu-YHvusS1gvJ6vyzpFP-_VohadF6lXBUhp_yX4a4B-UZHPTwCO1LcR1MvcCcxcN9nQPBkv3UZmm9aiJpAIb1nnEL35kviWhAFFMovk00X2H5vNMIj9xwIESDCErpk9HpLIsydpmK36KuSRvMoG1tm2EV5Qp_xD-8EZdeORb68sxx51fM-CUEiaCYq3hQGcpqs80Hhl_MSXTr-kR7z8BhPqY32LvwzorrIUL c -Y2KrUWfucEPSafq56Fc3DgR-XVl26ZbxVSQ1eAvkLm90negAotTGIKQh5UdH0fZVKrg13PGONaUopnW07xyJtkT6-AMxm3gQmIX5UBR2rGRBuKpe5gDUOMqIJhwjL67ta6V5VBS6Yci7owO33UMKn0Pc7JQP3hCSztPpfaEGsVlDTk_ksxTgeNfgDc7FBgQdPHevieEc0Pwg0X7byUhDuZ4iWKtXAM8c_lB6yBn8K6gfr1WUuyXHDeYdiSadvItYfBfsRRVzNh -j5A8tRmksUaJ1UQBRIW-нб iKMshJBLwo6uradhVMAg4lVVjuZLL4AxwUK85-1rrGOH3mL4GxBw2jYYsRY

Ключ publi c:

-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwMbvDPB+qOgep7tIkJul
yEF2Ru5ZBAZsdWePfqETmZOvYYXQgp6dkGLCzzpoLHkUWrzxtCLXdqtpEHIdK9LI
gEMxv409mViWVD1O+nNcJ5xoYQ8ix2Ge7h6u03IjrDkZfwV+4z4YERnbmGDmYhO5
ub7/pWLVfUJNj4cvgaXMT2MdtS9dXiInogLGlQ+0iKqfALEEbB/qQP3QoTxGVUcW
HT0pGU5kzqXyrcKk0VZWy8mi9BsuD1MbmKfI4YkbJFjlZJHduSmhWC/6h6O1K/FO
F4XzHa6ChqhqiTXcgO+kOmIFajKzSGK/YIOTeL0RwV3b8cp/qMlsOQcQ/2V2mDkP
2i0mNz+W7HbJF3XBg4fnSB8QaEAv1IFPiIdaNM7ogzFy7SyES7CpmdVzWhzboKZY
1xoluajSlkgZKIwhsEu8Btq6nJxs7cf1iKO8v0nl21GbYjSPBk0X3ntMljJoys9Z
Owc+0Zv/24e5/V21OctZNftge6TfmzRtoZxYglvfdX1LdUf2aj1togZDslq1B8ix
Apk8rHRCA5ERWKZtlvYYBHD+pNtyVPQTNYxSd2pSzz2eOX+10Q1Olvnlut1WMwxf
B+k7NWHe9KgYeVDHrwCv2lqvr8duqsqpuhONYwjKbcg3UuSR4EnGy4XyFm1ivxJl
XdyEq+C2GqMUTI9/wl03ZW0CAwEAAQ==
-----END PUBLIC KEY-----

Поэтому я пытаюсь создать объект PublicKey: * 101 * * 10 * ошибка:

W/System.err: java.security.spec.InvalidKeySpecException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: Error parsing public key

Я попробовал другой формат моего ключа publi c: в одну строку, с \ n, с или без "----- BEGIN PUBLI C KEY-- --- "... У меня всегда одна и та же ошибка.

Я попробовал ключ publi c на https://jwt.io/, и он работает.

Спасибо за помогите!

...