Skip to main content

Flask-Multipass provider for Keycloak

Project description

Flask-Multipass-Keycloak

This package provides the keycloak authentication and identity providers for Flask-Multipass.

KeycloakAuthProvider This provider is a simple wrapper around AuthlibAuthProvider, since Keycloak works well with the standard authlib provider in flask-multipass.

KeycloakIdentityProvider This provider gives access to group information and members via Keycloak REST API.

Install

pip install flask-multipass-keycloak

Usage

Configuration

The configuration follows the standard Flask-Multipass way and the Keycloak specific part placed into the keycloak_args section.

MULTIPASS_AUTH_PROVIDERS = {
    'keycloak': {
        'type': 'keycloak',
        'title': 'Keycloak Auth Provider',
        'authlib_args': {...}
    }
}

MULTIPASS_IDENTITY_PROVIDERS = {
    'keycloak': {
        'type': 'keycloak',
        'title': 'Keycloak Identity Provider',
        'identifier_field': 'email',
        'keycloak_args': {
            'grant_type': 'client_credentials',
            'client_id': '<client_id>',
            'client_secret': '<client_secret>',
            'access_token_url': '<access-token-url>',
            'realm_api_url': '<realm-api-url>'
        }
    }
}

The configuration values are following:

  1. grant_type

    Default value is client_credentials. In Keycloak, "Service accounts roles" must be enabled in client config (Client details/Settings/Capability).

    password is also supported. In Keycloak, "Direct access grants" must be enabled in client config (Client details/Settings/Capability). In this case 2 additional fields must be added: username and password.

  2. client_id

    In Keycloak, Client details/Setting/Client ID field.

  3. client_secret

    In Keycloak, Client details/Credentials/Client Secret field.

  4. access_token_url

    In Keycloak, Realm settings/General/Endpoints/OpenID Endpoint Configuration/"token_endpoint".

  5. realm_api_url

    The URL format is <base url>/admin/realms/<realm name>, where the realm is where the users and user groups are configured.

Performance

The library needs to get an API access token from Keycloak which typically takes 200-300ms. Set the cache key of the multipass identity provider configuration to the import path of a Flask-Caching instance or a function returning such an instance, or the instance itself to enable caching of tokens (until they expire) and group data (30 minutes).

Development

In order to develop flask-multipass-keycloak, install the project and its dependencies in a virtualenv. This guide assumes that you have the following tools installed and available in your path:

First, clone the repository locally with:

git clone https://github.com/unconventionaldotdev/flask-multipass-keycloak
cd flask-multipass-keycloak

Before creating the virtualenv, make sure to be using the same version of Python that the development of the project is targeting. This is the first version specified in the .python-version file and you can install it with pyenv:

pyenv install

You may now create the virtualenv and install the project with its dependencies in it with poetry:

poetry install

Contributing

This project uses GitHub Actions to run the tests and linter on every pull request. You are still encouraged to run the tests and linter locally before pushing your changes.

Run linter checks with:

poetry run -- make lint

Run tests with:

poetry run -- make test

Run tests against all supported Python versions with:

tox

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_multipass_keycloak-0.1.2-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file flask_multipass_keycloak-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_multipass_keycloak-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d3bf9f64b734261444dfba5aecc1a279c4c8d11b6537d83c20a89af5d971881b
MD5 4a09937aad589395e2bdfbda277e4214
BLAKE2b-256 3973ba06fb35daea8186573cb4a9bf39aa0abe4475e8cb6a528e00540babfe5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for flask_multipass_keycloak-0.1.2-py3-none-any.whl:

Publisher: releasing.yaml on unconventionaldotdev/flask-multipass-keycloak

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page