Проверка SNS с использованием AWS SDK для Java, версия 2

#java #amazon-sns

Вопрос:

Я использую AWS SDK для Java 2.x, программное обеспечение для зависимостей.amazon.awssdk:sns

Я получаю сообщение из темы sns по http. Мне интересно, существуют ли какие-либо официальные или неофициальные, но хорошо поддерживаемые библиотеки, которые могут выполнять проверку подписи.

Я реализовал проверку с использованием фрагментов кода из https://docs.aws.amazon.com/sns/latest/dg/sns-example-code-endpoint-java-servlet.html, но, возможно, существует лучшее решение

 public void verifySignature(SnsMessage message) {
        String signatureVersion = message.getSignatureVersion();
        if (signatureVersion.equals("1")) {
            // Check the signature and throw an exception if the signature verification fails.
            if (isMessageSignatureVersion1Valid(message)) {
                log.info("Signature verification succeeded");
            } else {
                log.info("Signature verification failed");
                throw new SecurityException("Signature verification failed.");
            }
        } else {
            log.info("Unexpected signature version. Unable to verify signature.");
            throw new SecurityException("Unexpected signature version. Unable to verify signature.");
        }
    }
 

Ответ №1:

На момент написания статьи (август 2021 года) AWS SDK для Java 2.x еще не поддерживает все функции AWS SDK для Java 1.x. Но, к счастью, вы можете использовать их бок о бок. Цитата из официальной документации:

Вы можете использовать обе версии AWS SDK для Java в своих проектах.

И в 1.x у вас есть SnsMessageManager, который, по-видимому, выполняет эту работу:

общедоступный класс SnsMessageManager

расширяет Объект

Отменяет блокировку сообщения SNS и проверяет его с помощью общедоступного сертификата SNS.

Ответ №2:

Возможно, добавление фрагмента для isMessageSignatureVersion1Valid() также помогло бы?