当前位置: 首页 > 知识库问答 >
问题:

SQS客户端验证异常-我们计算的请求签名与您提供的签名不匹配

寿子轩
2023-03-14

我尝试使用以下参数验证AWS S3队列:访问密钥、密钥、队列URL

public bool ValidateSqs(string queue_url, string access_key, string secret_key)
{

            if (string.IsNullOrWhiteSpace(access_key)
               || string.IsNullOrWhiteSpace(secret_key)
               || string.IsNullOrWhiteSpace(queue_url))
                return false;

            try
            {
                SqsClient sqsValid = new SqsClient(access_key, secret_key, queue_url);
                return sqsValid.CheckAwsCredentials();
            }
            catch (Exception ex)
            {
                LogUtils.Error("fail to validate SQS", ex);
                return false;
            }
        }

以下是SqsClient:

public class SqsClient
{
    private AmazonSQSClient _awsSQSClient;
    private readonly int MaxRetryAttempts = 3;

    public SqsClient(string accessKey, string secretKey, string url)
    {
        if (string.IsNullOrEmpty(accessKey))
        {
            throw new ArgumentNullException("accessKey");
        }

        if (string.IsNullOrEmpty(secretKey))
        {
            throw new ArgumentNullException("secretKey");
        }

        if (string.IsNullOrEmpty(url))
        {
            throw new ArgumentNullException("url");
        }

        AccessKey = accessKey;
        SecretKey = secretKey;
        Url = url;

        try
        {
            RestartClient();
        }
        catch (Exception ex)
        {
            LogUtils.WithParameters()
                .Append(x => AccessKey)
                .Append(x => SecretKey)
                .Error("Failed to create SQS Client", ex);

            throw;
        }
    }

 public bool CheckAwsCredentials()
        {
            try
            {
               _awsSQSClient.GetQueueAttributes(new GetQueueAttributesRequest
                {
                    QueueUrl = Url,
                    AttributeNames = new List<string> { "All" }
                });

                return true;
            }
            catch (Exception ex)
            {
                LogUtils.Error(ex);
                return false;
            }
        }

该异常是由CheckAwsCreentials()方法引发的。

亚马逊。我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。详情请咨询服务留档。

此请求的规范字符串应为“POST/49512474474/DEXQueue”

内容类型:application/x-www-form-urlencoded;charset=utf-8主机:sqs.ap-southerast-2.amazonaws.com用户代理:aws-sdk-dotnet-45/3.3.2.4 aws sdk-dotnet核心/3.3.8.1.NET_运行时/4.0.NET_框架/4.0操作系统/Microsoft_Windows_NT_10.0.14393.0客户端同步x-amz-content-sha256:92F6FC97D2A609DE283521ACC05E5FABE54AFE74277EFC5521 x-amz-date:20170620798Z

内容类型;主办用户代理;x-amz-content-sha256;x-amz-date 92f6fc97d2a609d5e283521acc0bbccf05e5fabe54f4afe7427217ef2fc5521'

错误的原因是什么?

谢谢你的帮助!

共有1个答案

暴才俊
2023-03-14

这可能是由于以下几个原因造成的:

  • 密钥复制/粘贴错误
  • 密钥损坏错误(字符串转义出错)
  • 意外地将QueueURL用作ServiceURL
 类似资料:
  • 我正试图上传一张使用AWS S3 SDK的图片。现在,这以前是有效的,但由于某种原因,它停止了工作,我开始得到这个错误: 现在,当我点击链接时,它会给我一个'NoSuchKey'错误: 我真的不明白这一点,因为我的键实际上只是一个字符串。我也试图上传一些东西,所以显然关键不会存在-我正在努力上传它! 另一个教程来自一个博客,我没有它的链接,但我上面的代码与文档中的这个教程相同。我所做的只是把它移到

  • 我有不同的对象来生成保存在S3中的文件。每个对象调用以下函数来保存文件。 我只有以下几个问题。对象要么总是保存文件,要么永远无法保存文件。 错误是 我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅REST身份验证和SOAP身份验证。(服务:S3,状态代码:403,请求ID:79b6c0a2-0d74-1f30-a4bf-246e9631ccd8,扩

  • 我试图按照教程HTTP://docs.aws.amazon.com/amazons3/latest/api/sigv4-post-example.html使用HTTP post方法将图像上传到s3 bucket。但我每次都得到以下错误 政策如下: 生成策略和签名的代码将粘贴到相关的表单字段中:

  • 我想从网站content.geappliances.io使用AWS API网关得到响应,但总是得到错误: {“信息”:"我们计算的请求签名与您提供的签名不匹配。请检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。\n\n此请求的规范字符串应为\n'GET\n/search/b2b/results\n\n内容类型:\n host:content.geapplications.io\

  • 我试图上传图片到s3与预先签署的url从aws SDK生成。 对于上面的返回url,当我试图访问它时,它给出了一个错误 null CORS配置 更新的解决方案

  • 我正试图在iOS上执行AWS上传。我正在遍历一个对象数组,并将大量大小不同的图像(1000+)上传到S3 bucket中。使用: 当我到达大约第700张图像时,上传过程开始变得非常缓慢,然后我开始在随后的每一次图像上传中收到这些错误: 编辑2:每个Yosuke请求的代码(我只是构建了一个请求对象数组,然后循环遍历数组并上传每个请求):