[ https://issues.apache.org/jira/browse/JCLOUDS-1595?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17480467#comment-17480467 ]
Jim Sermersheim edited comment on JCLOUDS-1595 at 1/23/22, 2:06 AM: -------------------------------------------------------------------- Thanks [~gaul]. It turns out my first stab at a fix was naive. The real issue is that org.jclouds.s3.filters.Aws4SignerBase#getCanonicalizedQueryString is percent-encoding the '/' while url-encoding the query string. https://datatracker.ietf.org/doc/html/rfc3986#section-3.4 and the URI class agree that '/' should not be encoded in query strings. Because '/' chars in query params are encoded in Aws4SignerForAuthorizationHeader, but not in the HTTP URL, the S3 server fails the auth. I'll fix the description and post a completely different PR later. was (Author: jimse): Thanks [~gaul]. It turns out my first stab at a fix was naive. The real issue is that org.jclouds.s3.filters.Aws4SignerBase#getCanonicalizedQueryString is percent-encoding the '/' while url-encoding the query string. https://datatracker.ietf.org/doc/html/rfc3986#section-3.4 and the URI class agree that '/' should not be encoded in query string. Because '/' chars in query params are encoded in Aws4SignerForAuthorizationHeader, but not in the HTTP URL, the S3 server fails the auth. I'll fix the description and post a completely different PR later. > ListBucketOptions methods should URLEncode values > ------------------------------------------------- > > Key: JCLOUDS-1595 > URL: https://issues.apache.org/jira/browse/JCLOUDS-1595 > Project: jclouds > Issue Type: Bug > Components: jclouds-blobstore > Affects Versions: 2.4.0 > Reporter: Jim Sermersheim > Priority: Minor > Labels: s3 > Time Spent: 40m > Remaining Estimate: 0h > > When org.jclouds.s3.options.ListBucketOptions calls {{queryParameters.put}} > any string values should be url encoded. > This is currently causing a bug when jclouds is used to list with a prefix > against NetApp's ONTAP S3 server (version 9.10.1). The calculation of the S3 > V4 signature differs between JClouds and the NetApp because the NetApp is > calculating it with escaped slashes (in the observed case, the delimiter was > "/" and the prefix ended with a "/". Both need to be escaped as %2F prior to > building the Authorization header. > For reference, the error coming back from the NetApp ONTAP is a 403 with the > message: "The request signature we calculated does not match the signature > you provided. Check your key and signing method." -- This message was sent by Atlassian Jira (v8.20.1#820001)