#jwt #amazon-cognito
#jwt #amazon-cognito
Вопрос:
Получение ошибки при проверке cognito jwt с использованием Java.auth0.jwt
Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value. Expected the discarded bits to be zero.
Вот код и токен jwt, с которым я работаю
токен jwt
String token = "eyJraWQiOiIwTGh4STAySSs1dUQ5XC9zRm01TXliUEZDSmJHaFwvNEsrcjMxc0l4bW5HZzA9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJhMTQ2MWVmMi04MWNiLTQxOWItYWQ2Yi02MjQyZGI1Zjk0YTQiLCJjb2duaXRvOmdyb3VwcyI6WyJ1cy1lYXN0LTFfZXluS0VtN3B4X0dvb2dsZSJdLCJ0b2tlbl91c2UiOiJhY2Nlc3MiLCJzY29wZSI6ImF3cy5jb2duaXRvLnNpZ25pbi51c2VyLmFkbWluIHBob25lIG9wZW5pZCBwcm9maWxlIGVtYWlsIiwiYXV0aF90aW1lIjoxNjEyMjYzODc2LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9leW5LRW03cHgiLCJleHAiOjE2MTIyNjc0NzYsImlhdCI6MTYxMjI2Mzg3NiwidmVyc2lvbiI6MiwianRpIjoiNDRlMmI1MWYtZTNkNy00YTc1LWE0MjgtYThjMmZmYTdlZjczIiwiY2xpZW50X2lkIjoiNGk4N25lN21iaHN1NmMxOXUyaGZxZTMxNTEiLCJ1c2VybmFtZSI6Imdvb2dsZV8xMTY1ODk4OTIyMTAyNzIzNTI0NDgifQ.WrFa3rQoeBzOv5-QQ-BsXkT94FbSpwvSZDXc8I-0yZCR_X2gcuaFEqIUNBePvCa8EeVgaYn9ldkt7-_Cf0RUA3jKx9U9O9q6P29IAYZQ9fWOUcWSo5gEJvGjoijpOI9QZlYfBbekXQvgp4TOtyBj6EZPUg1MMjja5e5DJzSmRMy-JkxPMcKVIbisUYFqv3uezkJg4AWp7kpkYIJKASBm-RODuW3Lc7Zc63lQOO59BVyWo7ar7U62o8QNAWdGU8T9ub1udGIso-oWjV_wC1SWDBbu5HAWNnoCebhTC707JABDGftzYmp";
Код Java
String key = JWT.decode(token).getKeyId();
JwkProvider jwkProvider = new UrlJwkProvider(JWT.decode(token).getIssuer());
Jwk jwk = jwkProvider.get(key);
BigInteger modulus = new BigInteger(1, Base64.decodeBase64(String.valueOf(jwk.getAdditionalAttributes().get("n"))));
BigInteger exponent = new BigInteger(1, Base64.decodeBase64(String.valueOf(jwk.getAdditionalAttributes().get("e"))));
PublicKey publicKey = null;
try {
publicKey = KeyFactory.getInstance("RSA").generatePublic(new RSAPublicKeySpec(modulus, exponent));
} catch (InvalidKeySpecException e) {
} catch (NoSuchAlgorithmException e) {
}
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) publicKey, null);
String iss = String.format("https://cognito-idp.%s.amazonaws.com/%s", "us-east-1", "us-east-1_eynKEm7px");
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer(iss)
.withClaim("token_use", "access_token") // make sure you're verifying id token
.build();
DecodedJWT jwt = verifier.verify(token);
Комментарии:
1. Пожалуйста, покажите, что вы уже сделали (код, пример JWT), чтобы люди могли воспроизвести вашу проблему, а затем помочь вам ее решить
2. @R. Хук, я добавил фрагмент кода