[ 
https://issues.apache.org/jira/browse/JCLOUDS-1161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15587637#comment-15587637
 ] 

ASF subversion and git services commented on JCLOUDS-1161:
----------------------------------------------------------

Commit 7826d22d301b1a6accef2b7686700231ffba7e29 in jclouds's branch 
refs/heads/master from [~shrinand]
[ https://git-wip-us.apache.org/repos/asf?p=jclouds.git;h=7826d22 ]

JCLOUDS-1161: Make AWSS3BlobRequestSignerV4 the default signer.

Added new live tests and fixed some unit tests accordingly.


> Signed PUT requests using signature v4
> --------------------------------------
>
>                 Key: JCLOUDS-1161
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1161
>             Project: jclouds
>          Issue Type: Bug
>          Components: jclouds-blobstore
>    Affects Versions: 2.0.0
>         Environment: Tried this on commit 
> 557a1156945590c221094a1ccc983ba9e1d99a60.
> {noformat}
> commit 557a1156945590c221094a1ccc983ba9e1d99a60
> Author: Iván Lomba <ivanlo...@gmail.com>
> Date:   Tue Aug 16 22:12:47 2016 +0200
>     JCLOUDS-482: Fix ProfitBricksComputeServiceLiveTest custom hardware assert
> {noformat}
>            Reporter: Shri Javadekar
>             Fix For: 2.0.0
>
>
> JIRA issues JCLOUDS-766 and JCLOUDS-1090 mention that signed put requests 
> don't work with jclouds. This is because "v4 URL signing requires a content 
> hash for the server to accept the PUT request but the jclouds API does not 
> allow for this". There is another way for doing this. The AWS 
> documentation[1] says that phrase UNSIGNED-PAYLOAD can be used when the 
> content hash is not available.
> The current code in jclouds already uses UNSIGNED-PAYLOAD as the content hash 
> and signs the requests. However, even with that signed put requests were 
> failing for me.
> Here are a couple of things I had to do to get signed put requests to work.
> 1. Use AWSS3BlobRequestSignerv4.
> {noformat}
> diff --git 
> a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
>  
> b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
> index 6c551d5..79ea8c7 100644
> --- 
> a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
> +++ 
> b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
> @@ -16,7 +16,7 @@
>   */
>  package org.jclouds.aws.s3.blobstore.config;
> -import org.jclouds.aws.s3.blobstore.AWSS3BlobRequestSigner;
> +import org.jclouds.aws.s3.blobstore.AWSS3BlobRequestSignerV4;
>  import org.jclouds.aws.s3.blobstore.AWSS3BlobStore;
>  import org.jclouds.blobstore.BlobRequestSigner;
>  import org.jclouds.s3.blobstore.S3BlobStore;
> @@ -34,6 +34,6 @@ public class AWSS3BlobStoreContextModule extends 
> S3BlobStoreContextModule {
>     @Override
>     protected void bindRequestSigner() {
> -      bind(BlobRequestSigner.class).to(AWSS3BlobRequestSigner.class);
> +      bind(BlobRequestSigner.class).to(AWSS3BlobRequestSignerV4.class);
>     }
>  }
> {noformat}
> 2. In my application, I had to make sure that the contentMD5 is not added to 
> the blob builder.
> {noformat}
>                             blob = blobStore.blobBuilder(newBlobName())
>                                 .forSigning()
>                                 .payload(input)
>                                 .contentLength(input.size())
> //                                .contentMD5(input.hash(Hashing.md5()))  
> <<<------------ HAD TO REMOVE THIS
>                                 
> .contentType(MediaType.OCTET_STREAM.toString())
>                                 .build();
>                             request = signer.signPutBlob(containerName, blob,
>                                     requestTimeoutSeconds);
> {noformat}
> Ofcourse, #2 above is the responsibility of the app writer. But jclouds 
> should change the default signer to AWSS3BlobRequestSignerV4.
> [1] 
> http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to