Я внедряю платежное решение в свой бэкэнд. Когда платеж завершается успешно, я получаю обратный вызов в свой бэкэнд с запросом, содержащим подпись JWS и полезную нагрузку. Чтобы убедиться, что запросы исходят от поставщика платежных услуг, я должен проверить подпись JWS.
Подпись должна быть рассчитана в соответствии со следующими инструкциями:
jws = base64URLEncode(JOSE Header)..base64URLEncode(alg(base64URLEncode(JOSE Header).base64URLEncode(Request Body)))
Чтобы проверить JWS, выполняются следующие шаги.
- Считайте содержимое пути сертификата как объект JSON и в массиве «keys» найдите объект с помощью «kid». Поле «kid» соответствует тому же значению в заголовке JOSE после его декодирования.
- В объекте JSON, полученном на шаге 1, найдите сертификат ключа publi c в первом поле массив с именем "x5 c".
- Используйте ключ 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, но их не удалось проверить.
У кого-нибудь есть опыт с этим, и кто может порекомендовать библиотеку для проверки этой подписи?