Search code examples
pythonminio

Minio minio.error.SignatureDoesNotMatch thrown with try-except


I am using the python package for the minio server. I have the following piece of code that is used for a login:

from minio.error import [...], SignatureDoesNotMatch, [...]

def login(self):
    try: 
        self.user = Minio(MINIO_CONFIG['MINIO_ENDPOINT'], 
                                access_key=self.username, 
                                secret_key=self.password, 
                                secure=MINIO_CONFIG['MINIO_SECURE'])
        return {"msg":"User is now logged in", "status": "OK"}
     except SignatureDoesNotMatch as err: 
        return {"msg": err.message, "status":"F"}
     except ResponseError as err: 
        return {'msg': err.message, 'status': "F"}
     except InvalidAccessKeyId as err: 
        return {"msg": err.message, "status":"F"}
     except InvalidArgument as err: 
        return {"msg": err.message, "status":"F"}
     except InvalidArgumentError as err: 
        return {"msg": err.message, "status":"F"}

The issue I am facing is that even though I do have in the try-except the SignatureDoesNotMatch in case the credentials are not correct, it does not return me the msg it should but it throws an minio.error.SignatureDoesNotMatch instead. Why does that happen?

The error I get:

minio.error.SignatureDoesNotMatch: SignatureDoesNotMatch: message: The request signature we calculated does not match the signature you provided.

Solution

  • This seems fine, looking at the code, this will never run into an error on it's own, regardless of the credentials provided. It will only run into an error when it makes an API call, or when you invoke methods like list_buckets, list_objects etc using this self.user instance, from outside this block.

    I think what you're trying to do is-- invoking methods like list_buckets etc from outside this encapsulation-- somewhere else not this part of the code, and then they produce this error and propagate them to the console. You cannot encapsulate the MinIO instance within try-catch and catch errors while you make use of stuff like self.user.list_buckets() from outside this try-catch block.