SAML-Toolkits / python3-saml

MIT License
669 stars 302 forks source link

Serialization of OneLogin_Saml2_Settings #401

Open mecampbellsoup opened 4 months ago

mecampbellsoup commented 4 months ago

We use django-allauth and are implementing support for customers/users bringing their own SAML IdP configurations.

We use OneLogin_Saml2_Settings in order to validate the SAML configurations they give to us.

However, I'm not seeing a clear and obvious way to have the OneLogin_Saml2_Settings object returned by OneLogin_Saml2_Settings(settings_input_from_customer) to give me back a serialized JSON or dict object that I can write to our DB to persist the configuration.

I'd imagine an API like OneLogin_Saml2_Settings._settings or something public-facing like OneLogin_Saml2_Settings.get_settings() that I can call on a valid instance to get back a mapping of the settings.

Am I missing something obvious?

As a result of not seeing an API for this, my code is doing something clunky like:

_settings = {
        "idp": {
            ...
        },
        "sp": {
            ...
        },
        "strict": True,
    }
# Initialization of the following object performs settings validation
OneLogin_Saml2_Settings(_settings)
return _settings
pitbulk commented 1 week ago

The toolkit contains idp_metadata_parser.py which basically allow you to get and parse any IdP SAML Metadata and transform it to a dict.

If you already have the Toolkit settings in a dict and you only want to validate, initializing the Settings object with your dict will do the trick as it internally call check_settings to validate the settings and if anything is wrong, will raise a OneLogin_Saml2_Error

So your code should look like the following:

try:
    OneLogin_Saml2_Settings(_settings)
except OneLogin_Saml2_Error as e:
    print e.code
    print e.message
    return None

return _settings