使用适用于 Java 的 AWS 开发工具包版本 2 进行 SNS 验证

ysh*_*hin 5 java amazon-sns

我使用 AWS SDK for Java 2.x,依赖项 software.amazon.awssdk:sns

我通过 http 收到来自 sns 主题的消息。我想知道是否有任何官方或非官方但支持良好的库可以进行签名验证。

我已经使用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.");
        }
    }
Run Code Online (Sandbox Code Playgroud)

whe*_*eph 4

截至撰写本文时(2021 年 8 月),AWS SDK for Java 2.x 尚不支持 AWS SDK for Java 1.x 的所有功能。但幸运的是,您可以并排使用它们。引用官方文档

您可以在项目中使用适用于 Java 的 AWS 开发工具包的两个版本。

在 1.x 中,SnsMessageManager显然可以完成这项工作:

公共类 SnsMessageManager

扩展对象

解组 SNS 消息并使用 SNS 公共证书对其进行验证。