I use token authentication in DRF and for a specific API call, I want to redirect to S3 (using a URL, for example https://my_bucket.s3.amazonaws.com/my/file/path/my_file.jpg?Signature=MY_AWS_SIGNATURE&AWSAccessKeyId=MY_AWS_ACCESS_KEY_ID ). However, I get the following error from AWS:
<Error> <Code>InvalidArgument</Code> <Message>Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified</Message> <ArgumentName>Authorization</ArgumentName> <ArgumentValue>Token a3f61c10592272399099882eb178bd4b755af5bf</ArgumentValue> <RequestId>E4038228DD1E6330</RequestId> <HostId>9c2xX59cugrR0CHjxQJR8IBE4MXBbNMX+wX2JdPJEuerkAftc32rufotM7COKLIavakByuRUXOo=</HostId> </Error>
This is understandable why this happens - the Authorization header with the DRF marker is propagated by redirection, and he does not like S3.
After researching and testing a million ways to get rid of this header, I refused and decided to try and redefine the title with the value S3: AWS MY_AWS_SIGNATURE:MY_AWS_ACCESS_KEY_ID , after which I get another error:
<Error> <Code>InvalidArgument</Code> <Message>Unsupported Authorization Type</Message> <ArgumentName>Authorization</ArgumentName> <ArgumentValue>Token a3f61c10592272399099882eb178bd4b755af5bf</ArgumentValue> <RequestId>94D5ADA28C6A5BFB</RequestId> <HostId>1YznL6UC3V0+nCvilsriHDAnP2/h3MoDlIJ/L+0V6w7nbHbf2bSxoQflujGmQ5PrUZpNiH7GywI=</HostId> </Error>
As you can see, the end result is the same - even if I override the Authorization header in my answer, it still retains the original authentication value of the DRF identifier.
# relevant portion of my response construction headers = {'Location': 'https://my_bucket.s3.amazonaws.com/my/file/path/my_file.jpg', 'Authorization': 'AWS %s:%s' % (params['AWSAccessKeyId'], params['Signature'])} return Response(status=status.HTTP_302_FOUND, headers=headers)
So my question is: how can the Authorization header in a DRF response be deleted or redefined?
gorus source share