/SATOSA-oidcop

SATOSA Frontend based on identity python oidcop

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

SATOSA oidcop frontend

CI build Python version Downloads Downloads per week License

SATOSA Frontend based on identity python oidcop.

Features

Endpoints:

  • provider discovery
  • jwks uri
  • authorization
  • token
  • userinfo
  • registration
  • registration_read endpoint
  • introspection endpoint
  • token exchange

Requirements

Setup

pip install satosa_oidcop

Configuration

Anyone can migrate its oidcop configuration, from flask_op or django-oidc-op or whatever, in SATOSA and without any particular efforts. Looking at the example configuration we see that config.op.server_info have a standard SATOSA configuration with the only addition of the following customizations, needed in SATOSA for interoperational needs. These are:

  • autentication
        authentication:
          user:
            acr: urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword
            class: satosa.frontends.oidcop.user_authn.SatosaAuthnMethod
  • userinfo
       userinfo:
         class: satosa.frontends.oidcop.user_info.SatosaOidcUserInfo

authentication inherits oidcop.user_authn.user.UserAuthnMethod and overloads two methods involved in user authentication and verification. These tasks are handled by SATOSA in its authentication backends.

userinfo inherits oidcop.user_info.UserInfo and proposes a way to store the claims of the users when they comes from the backend. The claims are stored in the session database (actually mongodb) and then they will be fetched during userinfo endpoint (and also token endpoint, for having them optionally in id_token claims).

SSO and cookies

oidcop SSO and cookies were not have been implemented because SATOSA doesn't support logout, because of this they are quite useless at this moment.

Client and Session Storage

MongoDB is the storage, here some brief descriptions for a demo setup. The interface to SATOSA oidcop storage is satosa.frontends.oidcop.storage.base.SatosaOidcStorage and it has three methods:

  • get_client_by_id(self, client_id:str, expired:bool = True)
  • store_session_to_db(self, session_manager, **kwargs)
  • load_session_from_db(self, req_args, http_headers, session_manager, **kwargs)

satosa.frontends.oidcop.storage.mongo.Mongodb overloads them to have I/O operations on mongodb.

Demo

Satosa-Saml2Spid is a custom Satosa configuration to deal with many SAML2 and OIDC Relying parties and many eduGain and SPID Identity Provider.

satosa_oidcop

Contributions

Feel free to open issues and pull requests, we build communities!

Developer notes

Storage design

At this time the storage logic is based on oidcop session_manager load/dump/flush methods. Each time a request is handled by an endpoint the oidcop session manager loads the definition from the storage, only which one are strictly related to the request will be loaded in the in memory storage of oidcop.

Roadmap

Tests

Before you run the tests mind that you've to start a local mongod instance.

pip install pytest
pytest --cov=satosa_oidcop -v --cov-report term --cov-fail-under=95 tests/

Authors

  • Giuseppe De Marco UniversitĂ  della Calabria

Credits

  • Roland Hedberg
  • Andrea Ranaldi ISPRA Ambiente
  • Identity Python Community