Несоответствие алгоритма jose4j между подписанным JWT и JWK - PullRequest
0 голосов
/ 25 мая 2018

Во время модульного тестирования я заметил некоторое ожидаемое поведение в отношении.

Я использовал ваш код для генерации пары ключей RsaJsonWebKey.После создания я установил алгоритм на RS512.Я создал публичный JWK на основе этого.В этот момент пара ключей и JWK имели одинаковый идентификатор ключа, алгоритм и сигнатуру.Затем в UT я изменил алгоритм JWK на RS256.Я ожидал, что это потерпит неудачу, но это все еще соответствует и проверяет.Конечно, идентификатор ключа и, самое главное, подписи все еще совпадают.Действительно ли алгоритм необходим?Глядя на исходный код Jose4J, кажется, что он никогда не устанавливается на соответствие JWK.

в методе SimpleJwkFilter.filter ()

match & = isMatch (alg, jwk.getAlgorithm ());<- alg никогда не устанавливается и поэтому передает isMatch </p>

1 Ответ

0 голосов
/ 01 июня 2018

Я предполагаю, что вы используете VerificationJwkSelector (который используется JwksVerificationKeyResolver и HttpsJwksVerificationKeyResolver).Он использует SimpleJwkFilter, но только указывает ему использовать «alg» на JWK в качестве критерия выбора в качестве метода устранения неоднозначности, когда первая попытка фильтрации приводит к более чем одному ключу.См .: https://bitbucket.org/b_c/jose4j/src/b577cb539b09cb691e848244dea1769c3f7921b9/src/main/java/org/jose4j/jwk/VerificationJwkSelector.java#lines-42

Я сталкивался с некоторыми случаями, когда в содержимом JWKS неправильно задавался «alg», и рассмотрение его при первоначальном выборе исключало фактический ключ проверки.Поведение VerificationJwkSelector предназначено для учета неправильных значений 'alg'.

В 2015 году был один модульный тест, в котором был JWKS с проблемными значениями alg: https://bitbucket.org/b_c/jose4j/src/b577cb539b09cb691e848244dea1769c3f7921b9/src/test/java/org/jose4j/jwk/VerificationJwkSelectorTest.java#lines-349

...