Open alehuo opened 4 years ago
Seems there is some state in there that cannot be pickled, in your above traceback it is some RSA public key value, probably from fetched jwks of the provider. So this is probably the keystore or some token thats producing trouble.
Yup, this doesn't happen if I use the basic Python dictionary (that is not persistent and exists in memory). I'd like to have persistent storage for my sessions, to support scaling the application.
Looking from the Cryptodome.PublicKey.RSA, it seems to be not picklable: https://github.com/Legrandin/pycryptodome/blob/128f9bfddd85d32b4ce907caa084e95dd6ae5062/lib/Crypto/PublicKey/RSA.py#L206
I wonder why..
I've opened an issue to the pycryptodome repo about this: https://github.com/Legrandin/pycryptodome/issues/365
I have solved this issue by creating a custom handler for Cryptodome.Publickey.RSA.
You can find the Redis-based session backend from here: https://github.com/alehuo/pyoidc-redis-session-backend
I'm currently implementing a custom Redis-based session backend for use with the pyoidc consumer. However, when trying to serialize some key-value pairs, I get an error which is shown below:
I'm using the jsonpickle library to do the serialization of key-value pairs.
/auth/callback endpoint source code
Redis based session storage source code
This piece of art is still work in progress, but the problem relies in the
__setitem__
function.The custom backend manages to serialize & deserialize some operations perfectly, but values that are highly complex fail to do so. Any clue what could be wrong?