尝试创建AWS Signature V4以签署API网关URL POST请求时的格式无效

时间:2018-03-02 10:31:40

标签: amazon-web-services amazon-iam sign

我使用此处找到的代码作为我的签名课程的基础:

https://gist.github.com/yvanin/0bdf68c1139ad698519e

由此我已经能够构建一个Authorization标头,但是当它与我的POST请求一起传递时,它会因错误而失败

价值格式' 已编辑'是无效的。

当我将我的授权标题沉默与在互联网上找到的示例进行比较时,它看起来非常适合(尽管我不使用Content-Type标头,因为请求没有有效负载)。任何人都可以协助我可能出错吗?

互联网示例是下面的第一个,我的是下面的。我已经更改了相关的访问密钥和签名数据来模糊实际值(编辑:显然我试图访问API网关服务,而不是IAM,这就是为什么我在标题中有execute-api的原因,也尝试过apigateway而且没有任何影响...)

            // AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7
            // AWS4-HMAC-SHA256 Credential=AAAAI7T5JMMLSKVKA6EQ/20180302/ap-southeast-2/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=856bc41f18582836b56a02d9563c8f4f621fce7338ae2ec3afabe254a1543667
编辑:解决了!所以,当我第一次在github链接上使用Sig V4代码时,有一个无法解决的扩展函数ParseQueryString。这是因为我错过了对System.Net.Http.Formatting的引用。试图找到这个库并添加它失败了,所以我编写了自己的扩展方法来做我认为函数正在做的事情。

显然,我的ParseQueryString版本不对,因为我最终通过查找通过NuGet添加的程序集的特定版本来解决缺少引用的问题(任何其他版本都会产生以下错误:

Unable to find a version of 'Microsoft.AspNet.WebApi.Client' that is compatible with 'System.Net.Http.Formatting

我要求的具体版本是:

PM> Install-Package System.Net.Http.Formatting -Version 4.0.20505

安装完成后,我编写的ParseQueryString扩展方法被标准替换,中提琴!我现在使用IAM授权从我的API网关获得响应。这是美好的一天:)

0 个答案:

没有答案