我有一个简单的AWS API网关实现,它受AWS_IAM授权保护。
我只想通过cURL从命令行进行测试:
curl --location --request GET 'https://<API_ID>.execute-api.eu-west-1.amazonaws.com/stage?type=type&category=category&lc=lc&passprhase=passprhase&product=product'
--header 'Authorization: AWS4-HMAC-SHA256 Credential=<AWS_ACCESS_KEY>/20200127/eu-west-1/execute-api/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=<AWS_SECRET_ACCESS_KEY>' --header 'Content-Type: application/json' \
--data-raw '{"query":"","variables":{}}'
但不断收到以下错误:
Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header.
有人能指点我做错了什么吗?
3条答案
按热度按时间f0ofjuux1#
从版本7.75开始,
curl
支持AWS V4签名身份验证,因此您应该能够通过以下方式调用AWS资源:请注意,您可能需要在
--aws-sigv4
值中添加您所在的区域和服务。例如:--aws-sigv4 "aws:amz:eu-west-2:execute-api"
您可以在此处找到更多文档:https://curl.se/libcurl/c/CURLOPT_AWS_SIGV4.html
exdqitrt2#
AWS_IAM授权使用Sigv4,其计算过程需要某些标头的值- Date是其中之一。您将x-amz-date作为“SignedHeaders”字段的一部分传递,但实际上并没有将其与其他标头一起传递。
创建正确的curl命令以调用AWS_IAM API的一种方法是使用Postman application。添加API URL并选择“授权”选项卡下的“AWS签名”。然后,您可以选择“代码”选项,并获得完整的curl命令,如下所示-
Create a Canonical Request for Signature Version 4
rt4zxlrg3#
我可以建议使用
awscurl
,这要容易得多。要安装
awscurl
,请单击here。有关文档,请参阅here。下面是调用igateway以调用lambda进行POST查询的示例。
服务执行API X POST -d '{“别名”:“xyx”,“类型”:“LDAP”}'https://. execute-api.us-west-2.amazonaws.com/Prod/user/groups/get--区域我们-西部-2 --访问密钥ACCESS_KEY --秘密密钥