如果我想从Java调用Amazon AWS Rest API,我有哪些选择。
在实现我自己的请求时,生成AWS4-HMAC-SHA256
Authorization头将是最困难的。
实际上,这就是我需要生成的头文件:
Authorization: AWS4-HMAC-SHA256 Credential=AKIAJTOUYS27JPVRDUYQ/20200602/us-east-1/route53/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=ba85affa19fa4a8735ce952e50d41c8c93406a11d22b88cc98b109b529bcc15e
2条答案
按热度按时间zbwhf8kr1#
我并不是说这是一个完整的列表,但我会考虑使用已建立的库,如:
但有时候,您只需要进行一个简单的调用,而不希望在应用程序中引入许多依赖项。您可能希望自己实现其余调用。生成正确的AWS Authorization头是最难实现的部分。
下面是在没有外部依赖的纯java OpenJDK中执行此操作的代码。
它实现了Amazon AWS API签名版本4签名流程。
AmazonRequestSignatureV4Utils.java 例如
使用示例:
AmazonRequestSignatureV4Utils.java
以及它将生成的跟踪:
编辑:更新了标题的排序。感谢@Gray的发现!
有关此代码的最新版本,请参见GitHub上的java-amazon-request-signature-v4仓库。
vwkv1x7d2#
如何从Java调用Amazon AWS API?
我从@AlexV得到了答案,然后修复了代码中的一些问题。(大小写不敏感)否则签名将不匹配。我想我可能修复了一些其他问题?我还通过删除不必要的集合和优化hex和trim方法改进了一些其他方法。我还更改了calculate方法以返回链接哈希-标头的Map,以便可以将它们适当地放入请求中。
这段代码与AWS签名文档示例相匹配(最后),我已经成功地使用S3验证了请求。
下面是一个使用示例,它显示了使用Apache HttpClient 4.5.13版发出的实际HTTP请求: