Я не знаком с библиотекой, но похоже, что вы подписываете токен новым, случайно сгенерированным ключом каждый раз, когда запускаете код:
EllipticCurveJsonWebKey senderJwk = EcJwkGenerator.generateJwk(EllipticCurves.P256);
Похоже, вы также устанавливаете идентификатор ключа как закрытый ключ в кодировке Base-64 (возможно, тот, который вы намеревались использовать?). Идентификатор ключа не является ключом, он просто используется для поиска в хранилище ключей, например ( Согласно Apple , идентификатор ключа для их API должен быть «Ваш закрытый ключ» ID из App Store Connect ").
Так что я думаю, причина того, что вы получаете ошибку «неверная подпись», заключается в том, что вы каждый раз подписываете токен новым ключом, а не тот, который вы используете для его проверки.