所有
我正在使用Play(v 1.2.4)框架开发一个简单的Java Web应用程序。应用程序使用Amazon的Product Advertising API执行签名的ItemLookup请求。我正在将应用程序部署到Google App Engine(GAE),其中存在我的问题。
详细信息: 在本地/测试模式下,AWS签名请求使用apache.commons.httpclient和更简单的java.net.URL完美地工作。在部署到GAE并发现不支持使用SocketConnection b / c的HTTPClient连接后,我修改了AWS调用以使用 java.net.URL 。 AWS ItemLookup请求不仅继续在本地模式下工作,而且我在Google App Engine(GAE)中不再收到任何例外。
问题: 但是,我遇到的问题是我的所有AWS ItemLookup请求都返回一条消息,表明签名的签名与AWS的预期不符。请参阅此问题末尾的实际消息。
因此,我不确定发生了什么。我正在记录从本地模式和GAE发出的请求,并且签名的URL请求的格式似乎没有任何问题。我检查了双/三重检查;我的请求是使用正确的AWS密钥发出的。这些调用在本地模式下使用相同的键,因此它们是否也不能通过GAE工作?例如,GAE上的示例请求(剥离了AWS密钥/标记):
SIGNED REQUEST=http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=<removed>&AssociateTag=<removed>&ItemId=B0051VVOB2&Operation=ItemLookup&ResponseGroup=Large&Service=AWSECommerceService&Timestamp=2012-03-04T00%3A52%3A23Z&Version=2011-08-01&Signature=<removed>
所以,我开始认为GAE上的 HmacSHA256 可能工作不正常,或者我可能需要在GAE上使用不同的算法?
也许我遇到过在GAE上使用AWS的某种问题?我真的可以在这个问题上使用一些帮助。
感谢您的协助。
ItemLookup响应错误(示例):
<ItemLookupErrorResponse xmlns="http://ecs.amazonaws.com/doc/2011-08-01/">
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</Error>
<RequestID>aa42318e-9c2c-4f04-9905-670866223bc5</RequestID>
</ItemLookupErrorResponse>