Am I going about this wrong? Would you recommend a different approach?
No, what you're doing seems fine for your use case. As Andrew Gaul pointed out, the SwiftBlobSigner [1] looks like what you want, specifically the versions that accept a timeout parameter.
If you have a look at the getBlobWithTime test [2, 3], you'll see that the expected result URL, which should work without requiring any headers to be set.
You could also try running the testSignGetUrlWithTime live test [4, 5] with wire and header logging turned up, to see what requests are made.
Regards ap[1] https://github.com/jclouds/jclouds/blob/master/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/SwiftBlobSigner.java [2] https://github.com/jclouds/jclouds/blob/master/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/SwiftBlobSignerExpectTest.java#L61 [3] https://github.com/jclouds/jclouds/blob/master/blobstore/src/test/java/org/jclouds/blobstore/internal/BaseBlobSignerExpectTest.java#L65 [4] https://github.com/jclouds/jclouds/blob/master/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftBlobSignerLiveTest.java [5] https://github.com/jclouds/jclouds/blob/master/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java#L79