![](/img/trans.png)
[英]Getting the subscription list under a topic in SNS via AWS SDK for Java
[英]SNS verification using the AWS SDK for Java, version 2
我將 AWS SDK 用於 Java 2.x,依賴軟件.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.");
}
}
At the time of writing (August 2021) AWS SDK for Java 2.x doesn't yet support all the features of AWS SDK for Java 1.x. 但幸運的是,您可以並排使用它們。 引用官方文檔:
您可以在項目中為 Java 使用 AWS SDK 的兩個版本。
在 1.x 中,您有SnsMessageManager顯然可以完成這項工作:
公共 class SnsMessageManager
擴展 Object
解組 SNS 消息並使用 SNS 公共證書對其進行驗證。
也許為isMessageSignatureVersion1Valid()
添加一個片段也會有所幫助?
對於最新版本的 SNS SDK 目前1.12.286 - 在消息反序列化到SnsMessage object 期間自動完成簽名驗證。
您可以使用SnsMessageManager#parseMessage將傳入消息反序列化為 SnsMessage object。
來自 SNS SDK javadoc :
將消息解組為 SnsMessage 的子類。 這將自動驗證消息的真實性,以確保它是由 SNS 發送的。 如果無法驗證消息的有效性,則會拋出異常。 參數:messageBody – 輸入 stream 包含消息 JSON。 返回:未編組的消息 object。
從 SNS SDK 源代碼中也很清楚:
SnsMessageManager#parseMessage -> SignatureVerifier#verifySignature
所以這樣的事情會起作用:
InputStream messageInputStream = "<message received from SNS>"
SnsMessage snsMessage = new SnsMessageManager().parseMessage(messageInputStream)
有關簽名驗證的詳細信息,請參閱SNS 文檔的這一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.