Skip to main content

SATOSA oidcop frontend

CI build License PyPI Downloads Downloads per week Python version Conventional commits

SATOSA Frontend based on idpyoidc by Identity Python (previously 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

Environment variables (!ENV)

The frontend YAML config supports !ENV and !ENVFILE tags (via SATOSA's YAML loader), consistent with pyeudiw and other SATOSA backends/frontends. Use them for sensitive or deployment-specific values:

config:
  domain: !ENV SATOSA_HOSTNAME
  storage:
    kwargs:
      url: !ENV MONGO_OIDCOP_HOST
      connection_params:
        username: !ENV MONGODB_OIDCOP_USERNAME
        password: !ENV MONGODB_OIDCOP_PASSWORD
  op:
    server_info:
      session_params:
        encrypter:
          kwargs:
            password: !ENV SATOSA_ENCRYPTION_KEY
            salt: !ENV SATOSA_SALT

Required env vars for the example config: SATOSA_HOSTNAME, MONGO_OIDCOP_HOST, MONGODB_OIDCOP_USERNAME, MONGODB_OIDCOP_PASSWORD, SATOSA_ENCRYPTION_KEY, SATOSA_SALT.

Configuration structure

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 does not 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.

Subject type

The client configuration can also include the subject_type key, with permitted values being public and pairwise. If absent, the default is to choose public. This has been driven by backwards compatibility with existing behaviour: oidcop (session_manager.create_session) defaults to public.

For user privacy, we strongly recommend selecting pairwise for new deployments, unless public is absolutely needed (for linking users across related but distinct services).

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, e.g. with:

sudo docker run \
  --rm \
  -e ALLOW_EMPTY_PASSWORD=yes \
  -e MONGODB_ENABLE_JOURNAL=false \
  -p 27017:27017 \
  --name mongodb \
  bitnami/mongodb:latest

If you like you can use mongo-express as a management UI over the local mongo instance:

sudo docker run \
  -e ME_CONFIG_MONGODB_SERVER=$MONGOHOST-OR-DOCKER-BRIDGE-LIKE-172.17.0.1 \
  -p 8081:8081 \
  mongo-express

Then run the tests:

pip install pytest pytest-cov
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
  • Pavel Břoušek @ CESNET
  • Identity Python Community

Metadata

Release files for satosa-oidcop 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for satosa-oidcop 4.1.0
File Size Uploaded Provenance Actions
satosa_oidcop-4.1.0.tar.gz 55.3 kB Without provenance Details for satosa_oidcop-4.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for satosa-oidcop 4.1.0
File Interpreter ABI Platform Actions
satosa_oidcop-4.1.0-py3-none-any.whl Python 3 none any Details for satosa_oidcop-4.1.0-py3-none-any.whl

Total release size: 106.7 kB

Release files / satosa_oidcop-4.1.0.tar.gz

Download URL satosa_oidcop-4.1.0.tar.gz
Size 55.3 kB
Tags Source
SHA-256 checksum
How to use checksums
07716f9c5a44d2bbe9ae7a25ebcf922ca2aff1a294b759164612328b8777127c
BLAKE2b-256 checksum
How to use checksums
19efd4e3af0f16f4701cb4e5d0d76cc8a15fe04bd99e222e7c695c16fa63e505
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / satosa_oidcop-4.1.0-py3-none-any.whl

Download URL satosa_oidcop-4.1.0-py3-none-any.whl
Size 51.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8dc0322428ec6c44e3a8bab354ba5c3dd037b7d90a37aabd404f04f4beb82dcc
BLAKE2b-256 checksum
How to use checksums
bc319720ae40461e403dbf86f2046b21beceaae1b850d21e3511ba81e6eb5001
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Security for satosa-oidcop 4.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page