#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()
также помогло бы?