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

调用AWS SES接口报错:凭证需限定为正确服务'ses'

解决AWS SES API "Credential should be scoped to correct service: 'ses'" 错误
  • 检查签名生成逻辑中的服务名称
    你虽然把Authorization头里的mobiletargeting改成了ses,但如果生成signature的代码中仍然用mobiletargeting作为服务标识,签名验证肯定失败。AWS的签名是基于服务名称哈希计算的,头里改了但计算逻辑没改等于白搭,必须确保签名计算全流程的服务名称统一为ses。

  • 确保日期参数完全一致
    你Authorization头里的日期是硬编码的20230527,但X-Amz-Date是当前UTC时间的动态值,这两个日期必须完全匹配,同时签名计算时用的日期也要和这个值一致。建议把日期提取为变量统一使用:

    var date = DateTime.UtcNow;
    var dateStamp = date.ToString("yyyyMMdd"); // 用于Credential部分的日期
    var dateTimeStamp = date.ToString("yyyyMMddTHHmmssZ"); // 用于X-Amz-Date和签名计算的日期
    

    然后把Authorization头里的日期部分换成dateStamp,别再用硬编码值。

  • 验证SignedHeaders的完整性与一致性
    签名计算时指定的SignedHeaders必须和实际请求里的headers完全一致,顺序也要对应。比如Postman生成的请求可能包含额外headers(比如content-type),如果你的签名计算没包含这些,就会导致验证失败。还要确保host头被正确包含,且值和请求的主机地址email.us-east-1.amazonaws.com一致。

  • 对比Postman的签名细节
    打开Postman的请求详情,查看它生成的Authorization头和AWS签名配置里的参数(服务名称、日期、SignedHeaders等),逐一和你的C#代码对比,找出参数不一致的地方——重点盯服务名称、日期、参与签名的headers这几个核心点。

修正后的Authorization头代码示例:

request.AddHeader("Authorization", 
    $"AWS4-HMAC-SHA256 Credential=[ourCredentialHere]/{dateStamp}/us-east-1/ses/aws4_request, SignedHeaders=host;x-amz-date, Signature={signature}");

内容的提问来源于stack exchange,提问作者Rodney Ellis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:33:15