Не могу сделать ES256 JWT за java - PullRequest
0 голосов
/ 20 апреля 2020

Я не могу сделать JWT, используя алгоритм ES256, и я не знаю почему. Вот мой код:

Map<String, Object> headerMap = new HashMap<String, Object>();

headerMap.put("kid", keyId);
headerMap.put("alg", "ES256");
headerMap.put("typ", "JWT");


Map<String, Object> claimMap= new HashMap<String, Object>();
claimMap.put("iss", teamId);
claimMap.put("iat", nowTime.getTime());
claimMap.put("exp", expTime);
claimMap.put("aud", appleDomain);
claimMap.put("sub", clientId);

SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.ES256;
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(getKey());
Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());



String jwt = Jwts.builder()
    .signWith(signatureAlgorithm, signingKey)
    .setClaims(claimMap)
    .setHeader(headerMap).compact();


java.lang.IllegalArgumentException: Elliptic Curve signatures must be computed using an EC PrivateKey.  The specified key of type javax.crypto.spec.SecretKeySpec is not an EC PrivateKey.
at io.jsonwebtoken.impl.crypto.EllipticCurveSigner.<init>(EllipticCurveSigner.java:36)
at io.jsonwebtoken.impl.crypto.DefaultSignerFactory.createSigner(DefaultSignerFactory.java:47)
at io.jsonwebtoken.impl.crypto.DefaultJwtSigner.<init>(DefaultJwtSigner.java:37)
at io.jsonwebtoken.impl.crypto.DefaultJwtSigner.<init>(DefaultJwtSigner.java:32)
at io.jsonwebtoken.impl.DefaultJwtBuilder.createSigner(DefaultJwtBuilder.java:338)
at io.jsonwebtoken.impl.DefaultJwtBuilder.compact(DefaultJwtBuilder.java:320)

Как я могу использовать E C закрытый ключ, используя мой файл ключа p8 (он от apple для использования auth api)?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы знаете тип ключа, который у вас есть в вашем файле p8? Существуют разные типы ключей и для разных типов алгоритмов шифрования. Я бы сказал, что у вас, вероятно, есть пара ключей RSA вместо пары ключей E C.

Я предлагаю использовать проводник хранилища ключей , чтобы создать новый ключ и добавить его в хранилище ключей.

...