Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用查询字符串身份验证发布到AmazonAWS Kinesis流_Javascript_Authentication_Post_Amazon Web Services - Fatal编程技术网

Javascript 使用查询字符串身份验证发布到AmazonAWS Kinesis流

Javascript 使用查询字符串身份验证发布到AmazonAWS Kinesis流,javascript,authentication,post,amazon-web-services,Javascript,Authentication,Post,Amazon Web Services,我有一个有趣且理论上不可能完成的任务,那就是从IE8和IE9中获取AmazonAWS运动分析。根据亚马逊自己的SDK,这是不可能的,因为XDomainRequest不允许自定义头。然而,与此相反。我的目标是为XMLHttpRequest编写一个垫片,它利用XDomainRequest对象并将所有Amazon头转换为查询字符串参数 实际的实现比我希望的要困难得多。由于Amazon的查询字符串身份验证仅将主机用于SignedHeader,而AmazonAWS SDK试图使用主机、日期和目标,因此我必

我有一个有趣且理论上不可能完成的任务,那就是从IE8和IE9中获取AmazonAWS运动分析。根据亚马逊自己的SDK,这是不可能的,因为XDomainRequest不允许自定义头。然而,与此相反。我的目标是为XMLHttpRequest编写一个垫片,它利用XDomainRequest对象并将所有Amazon头转换为查询字符串参数

实际的实现比我希望的要困难得多。由于Amazon的查询字符串身份验证仅将主机用于SignedHeader,而AmazonAWS SDK试图使用主机、日期和目标,因此我必须重新计算签名。这意味着CryptoJS和大量的实验可以让一切正常工作

在接收到4小时的计算签名不匹配后,我终于开始得到一个不同的错误代码:无法确定要授权的服务/操作名称

谷歌搜索这个错误:从打字错误到额外的换行字符,再到使用日期戳而不是版本号。然而,我尝试了一切,但没有任何帮助

下面是一个示例cURL请求和返回值:

curl -H "Content-Type:text/plain" --data "{\"Data\":\"VALID BASE64 DATA\",\"PartitionKey\":\"PARTITION\",\"StreamName\":\"STREAM\"}" "https://kinesis.us-east-1.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJMAGAYBGGRNZQI4A/20140723/us-east-1/kinesis/aws4_request&X-Amz-Date=20140723T153144Z&X-Amz-SignedHeaders=host&X-Amz-Target=Kinesis_20131202.PutRecord&X-Amz-User-Agent=aws-sdk-js/2.0.0&X-Amz-Signature=VALID_SIGNATURE"
返回:

<AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
答复:

{"SequenceNumber":"49540780386103606919741841581837328106424971136629473281","ShardId":"shardId-000000000000"}

有人知道我做错了什么,以及为什么我不能与Kinesis交流吗?

仔细检查并清理一些从未得到答案的老问题

根据Michael-sqlbot:

计划B是将您的请求发送到应用程序服务器,并将其代理给kinesis


事实证明,这是与动觉沟通的唯一解决方案。设置一个代理,允许我将自定义头作为查询字符串传递,然后它重新编译并向前发送请求

似乎您的X-Amz-Signed-headers=host表明您没有签署足够的头-查询字符串参数,在本例中,至少是X-Amz-Target和X-Amz-Date,对于使用查询字符串的请求,签名头中只包含主机。这是PythonCodeGood point中步骤3之后不久的一条评论,但请注意,您引用的文档表明它们是用于GET not POST的。如果没有,请尝试将curl内容类型标题设置为application/x-amz-json-1.1。与文本/纯文本相比,运动反应似乎有所不同。除此之外,计划B是将您的请求发送到应用程序服务器,并将其代理给kinesis。
{"SequenceNumber":"49540780386103606919741841581837328106424971136629473281","ShardId":"shardId-000000000000"}