Проверка подписи токена OpenID Connect ID не удалась в Java - PullRequest
0 голосов
/ 26 сентября 2018

Я использую пример приложения для проверки проверки подписи OpenID Connect.Но каждый раз, когда я пытался, мой токен проверки подлинности терпел неудачу.Я запрашиваю идентификатор токена как response_type = idtoken.Я использую мини-оранжевый в качестве поставщика OIDC.

Это токен, который я получил

eyJraWQiOiIxIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjoibXYyZHhTd0p6b1hVVkVJIiwic3ViIjoiZGlsaXRoLmVyYW5nZUBkY3Nhc2lhLm5ldCIsImF1ZCI6WyJ3aDR5ZDlnd1N1c19kdnMiXSwiZmlyc3RuYW1lIjoiZGlsaXRoIiwiYXV0aF90aW1lIjoiV2VkIFNlcCAyNiAxMzoyMzozOSBVVEMgMjAxOCIsImlzcyI6Imh0dHBzOlwvXC9hdXRoLm1pbmlvcmFuZ2UuY29tIiwiZXhwIjoxNTM3OTc4MjE5LCJub25jZSI6ImFiZGNlZmdoaWprbG1ub3AiLCJpYXQiOjE1Mzc5NjgyMTksImVtYWlsIjoiZGlsaXRoLmVyYW5nZUBkY3Nhc2lhLm5ldCIsImxhc3RuYW1lIjoiVml0aGFuYWdlIn0.hgkVlKwXWKt9yAF11940U5HOOR48U4JIjfVZwYYXd1mDo-fHZYaoaIQ76HLPVBqk8dagmtY3lz0wRald9JYIrNucxHQOLKbEKzjG7qCfngZVSNFUhC7nUrttbeMvGnz8mLtaa8DjqYsaQoOWrTzSh7rR_r3VzAQx6T6HSQUelNg

Это код, с которым я запускаю, чтобы проверить этот токен.

    public void verifyid(String idt)throws Exception {
    String jwt = idt;
    FileInputStream fis = new FileInputStream("C:/Users/Dexter/Downloads/RSA256_OpenID_public_key.pem");
    byte[] buffer = new byte[10];
    StringBuilder sb = new StringBuilder();
    while (fis.read(buffer) != -1) {
        sb.append(new String(buffer));
        buffer = new byte[10];
    }
    fis.close();
    String publicKeyPEM = sb.toString();
    RsaKeyUtil rsaKeyUtil = new RsaKeyUtil();
    PublicKey publicKey = rsaKeyUtil.fromPemEncoded(publicKeyPEM);
    JwtConsumer jwtConsumer = new JwtConsumerBuilder()
            .setRequireExpirationTime()
            .setVerificationKey(publicKey)
            .build();
    JwtClaims jwtDecoded = jwtConsumer.processToClaims(jwt);
    String username = jwtDecoded.getStringClaimValue("sub");

    String requiredScope = "sub";
    List<String> scopes = jwtDecoded.getStringListClaimValue("sub");
    if (!scopes.stream().anyMatch(scope -> scope.equals(requiredScope))) {
        throw new Exception("Required scope is not claimed: " + requiredScope);
    }
}

Выдает это исключение

org.jose4j.jwt.consumer.InvalidJwtSignatureException: JWT отклонено из-за неверной подписи.Дополнительная информация: [[9] Invalid JWS Подпись: JsonWebSignature { "ребенок": "1", "Тип": "JWT", "ALG": "RS256"} -> eyJraWQiOiIxIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjoibXYyZHhTd0p6b1hVVkVJIiwic3ViIjoiZGlsaXRoLmVyYW5nZUBkY3Nhc2lhLm5ldCIsImF1ZCI6WyJ3aDR5ZDlnd1N1c19kdnMiXSwiZmlyc3RuYW1lIjoiZGlsaXRoIiwiYXV0aF90aW1lIjoiV2VkIFNlcCAyNiAxMzoyMzozOSBVVEMgMjAxOCIsImlzcyI6Imh0dHBzOlwvXC9hdXRoLm1pbmlvcmFuZ2UuY29tIiwiZXhwIjoxNTM3OTc4MjE5LCJub25jZSI6ImFiZGNlZmdoaWprbG1ub3AiLCJpYXQiOjE1Mzc5NjgyMTksImVtYWlsIjoiZGlsaXRoLmVyYW5nZUBkY3Nhc2lhLm5ldCIsImxhc3RuYW1lIjoiVml0aGFuYWdlIn0.hgkVlKwXWKt9yAF11940U5HOOR48U4JIjfVZwYYXd1mDo-fHZYaoaIQ76HLPVBqk8dagmtY3lz0wRald9JYIrNucxHQOLKbEKzjG7qCfngZVSNFUhC7nUrttbeMvGnz8mLtaa8DjqYsaQoOWrTzSh7rR_r3VzAQx6T6HSQUelNg]

Я пытаюсь проверить идентификационный токен, используя их открытый ключ, который я получил при создании приложения

Почему эта проверка не удалась?

...