我向AWS发出请求:POST https://myapi.com/users/us-west-2:123
如果我放弃us-west-2:
但包括生成
The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method.
这似乎是:
的原因,因为它需要进行URL编码。使用编码的uri生成签名会生成相同的错误!
POST https://myapi.com/users/us-west-2%3A123
发生了什么事?我的签名生成器使用
{
"path": "/users/us-west-2%3A123",
"headers": {
"X-Amz-Date": timestamp,
"host": "myapi.com",
},
"body": "",
}
我使用此生成的代码向POST
发出https://myapi.com/users/us-west-2%3A123
请求,但没有正文。
答案 0 :(得分:1)
哇。我懂了。
以下是发生的事情:
我正在生成请求/users/us-west-2%3A123
,当我生成签名时,我使用的包(react-native-aws-signature
)将%编码为百分比,因此它将%
转换为{{1} }}!
修复方法是切换到%25
或更确切地说是分叉aws4
并在签名请求中使用aws4-react-native
选项。我也将doNotEncodePath: true
请求(节点)发送到fetch
。
我要感谢亚马逊支持,GitHub和运气。
答案 1 :(得分:0)
我也遇到了这个问题。在我们的应用程序中,我们希望能够将id作为pathParamter发送,如此
/admin/eu-west-1:xxxx-xxxx-xxxx-xxx
error Msg: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method.
如果我删除冒号(:)并将其替换为任何其他字符,例如%
或任何数字/字符,我的请求就会消失。
我知道有可能的解决方案来重构API以接受2个单独的参数,例如region和id。
/users/{region}/{id}
Example: /users/eu-west-1/xxxx-xxxx-xxxx-xxx
但是,我们希望我们的API遵循严格的模式,这对我们来说不是最好的解决方案。
我们的模式:
/someObject
GET - get a list
POST - Create
PUT - Update ALL
/{id}
GET - Get one
PUT - Update one
Delete - Delete one