AWS Java SDK 2调用SESv2 listContacts接口出现签名不匹配错误
问题成因
- 你使用的AWS Java SDK 2.17.51版本存在SES V2服务专属的签名计算缺陷:当
ListContactsRequest请求携带filter参数时,SDK对嵌套过滤结构体的序列化规则与SES V2服务端要求不匹配,导致客户端生成的请求签名和服务端计算的签名不一致,触发报错。 - 该缺陷仅影响携带过滤参数的listContacts接口调用,其余不带特殊嵌套过滤参数的SES接口、S3等其他AWS服务的签名逻辑不受影响,因此你其他接口的调用可以正常返回结果。
解决方案
- 方案1:升级AWS Java SDK版本到2.18.0及以上,该版本已经正式修复了SES V2的签名计算bug,升级后原有业务代码无需任何修改即可正常运行。
- 方案2:如果受项目限制暂时无法升级SDK,可以先移除
ListContactsRequest的filter参数,全量拉取联系人列表后在业务侧自行做主题过滤,适配代码参考如下:
val request = ListContactsRequest.builder() .contactListName("mylist") .pageSize(10000) // 移除服务端filter参数 .build() // 本地过滤匹配指定主题的联系人 val contacts = client.listContacts(request).contacts() .asScala .filter(_.topicPreferences().asScala.exists(_.topicName() == "mytopic")) .asJava
- 方案3:如果必须保留服务端过滤逻辑且不能升级SDK,可以临时改用AWS CLI调用或者直接构造HTTP请求签名调用接口,绕过SDK的签名缺陷。
内容的提问来源于stack exchange,提问作者mitchus
相关产品推荐
相关产品推荐

