Проверка JWS в JavaScript (NodeJS) - PullRequest
0 голосов
/ 24 марта 2020

Я внедряю платежное решение в свой бэкэнд. Когда платеж завершается успешно, я получаю обратный вызов в свой бэкэнд с запросом, содержащим подпись JWS и полезную нагрузку. Чтобы убедиться, что запросы исходят от поставщика платежных услуг, я должен проверить подпись JWS.

Подпись должна быть рассчитана в соответствии со следующими инструкциями:

jws = base64URLEncode(JOSE Header)..base64URLEncode(alg(base64URLEncode(JOSE Header).base64URLEncode(Request Body)))

Чтобы проверить JWS, выполняются следующие шаги.

  1. Считайте содержимое пути сертификата как объект JSON и в массиве «keys» найдите объект с помощью «kid». Поле «kid» соответствует тому же значению в заголовке JOSE после его декодирования.
  2. В объекте JSON, полученном на шаге 1, найдите сертификат ключа publi c в первом поле массив с именем "x5 c".
  3. Используйте ключ publi c для проверки подписи, используя предпочитаемую библиотеку (для java стандартом является jose4j)

В документах они рекомендуют использовать библиотеку jose4j (Java) для проверки подписи. Это выглядит следующим образом:

JsonWebSignature jws = new JsonWebSignature();
jws.setAlgorithmConstraints(new AlgorithmConstraints(AlgorithmConstraints.ConstraintType.WHITELIST,
                AlgorithmIdentifiers.ECDSA_USING_P256_CURVE_AND_SHA256));
jws.setCompactSerialization(jwsSignature);
jws.setKey(publicKey);
jws.setEncodedPayload(null);
jws.setPayload(callbackBody);
jws.setKnownCriticalHeaders(Util.getCritSignatureHeaders());
jws.verifySignature();

Поскольку мой бэкэнд написан на NodeJS, я должен go об этом по-другому, но я не могу найти библиотеку, которая предлагает функциональность нужно проверить этот токен. Я пробовал пакеты jose и node-jose npm, но их не удалось проверить.

У кого-нибудь есть опыт с этим, и кто может порекомендовать библиотеку для проверки этой подписи?

...