Сбой проверки токена JWT с помощью Java.auth0.jwt

#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. Хук, я добавил фрагмент кода