You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android调用AmazonSQS报403错误InvalidClientTokenId问题求助

注意:你贴出的代码中存在笔误Strting m_queue_url,实际代码中请修正为String类型。

问题根因

你当前遇到的InvalidClientTokenId报错属于请求签名校验不通过,相同凭证可正常访问S3说明密钥本身有效,问题出在Android端SQS客户端的初始化配置与S3存在差异。

可行解决方案

按优先级依次排查调整:

  1. 强制指定SQS队列对应区域
    SQS是区域级服务,未显式指定区域时SDK会使用默认区域,与队列实际创建区域不一致时会直接导致签名校验失败。S3支持全局自动解析所以无此问题,调整初始化代码:
BasicAWSCredentials m_awsCredentials = new BasicAWSCredentials(PREF_AWS_ACCESSKEY,PREF_AWS_SECRETKEY);
AmazonSQSClient m_sqs_client= new AmazonSQSClient(m_awsCredentials);
// 替换为你的SQS队列实际所属区域,比如Regions.CN_NORTH_1、Regions.US_EAST_1
m_sqs_client.setRegion(Region.getRegion(Regions.US_EAST_1));
// 也可直接指定服务端点,和队列所在区域匹配即可
// m_sqs_client.setEndpoint("sqs.us-east-1.amazonaws.com");
String m_queue_url = m_sqs_client.getQueueUrl(m_queue_name).getQueueUrl();
  1. 强制使用V4签名算法
    旧版本AWS Android SDK默认对SQS使用V2签名算法,目前多数AWS区域已不支持V2签名,可显式指定SQS客户端使用V4签名:
// 初始化SQS客户端后添加以下配置,区域替换为队列实际区域
m_sqs_client.setSignerRegionOverride("us-east-1");
m_sqs_client.setSignerOverride("AWS4SignerType");
  1. 排查ProGuard混淆问题
    Android端特有的混淆规则可能导致SQS相关的签名计算类被篡改,导致签名结果错误,在ProGuard规则中添加AWS SDK保留规则:
-keep class com.amazonaws.** { *; }
-keep interface com.amazonaws.** { *; }
-dontwarn com.amazonaws.**
  1. 核对系统时间
    AWS要求请求发起时间与服务器时间差不能超过15分钟,否则会判定签名无效,确认Android设备的系统时间为自动同步的标准时间即可。

内容的提问来源于stack exchange,提问作者Gogu CelMare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:18:03