How do you use gcs signed URL to do multipart upload?

Using GCS, I want to generate a link on the server and pass it to the clients. The clients use it to upload a large file, hence the multi part upload.

I'm able to initiate the multipart upload which gives me the uploadId (ref: https://cloud.google.com/storage/docs/xml-api/post-object-multipart). But when I try to upload the parts using the signed url which I used to make the POST request on, or generate new signed urls for each part with PUT, I get a 403 with `SignatureDoesNotMatch` code with reason `The request signature we calculated does not match the signature you provided. Check your Google secret and signing method.`

The service account used here at "sa json" should have all the permissions because it is added as a storage admin to the project itself.

Here's the python code I'm using. (gist: https://gist.github.com/PrashantRaj18198/3a86f3dede38d828367193e6236e94b3)

Any help would be appreciated. I'm not sure about the issue because I'm not using my own signing program, I'm likely missing something.

 
0 1 178