You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Denis Kotnik ebfaa33ee6
fix: use a_public_key() in a_decode_token() instead of public_key() (#582)
4 months ago
.github/workflows chore: Fix/latest keycloak updates (#572) 5 months ago
bin pure, not universal. 3 years ago
docs docs: remove dependency lists from install.rst (#569) 5 months ago
src/keycloak fix: use a_public_key() in a_decode_token() instead of public_key() (#582) 4 months ago
tests fix: correctly pass query params in a_send_update_account and a_send_verify_email (#581) 4 months ago
.gitignore feat: Async feature (#566) 5 months ago
.pre-commit-config.yaml fix: tests and upgraded deps (#419) 2 years ago
.readthedocs.yaml chore: updated dependencies, moved docs into separate poetry group 7 months ago
.releaserc.json feat: initial setup of CICD and linting 3 years ago
CHANGELOG.md docs: changelog update 4 months ago
CODEOWNERS feat: initial setup of CICD and linting 3 years ago
CONTRIBUTING.md fix: passing timeout values to ConnectionManager (#578) 4 months ago
LICENSE style: removed manifest, applied pre-commit hooks 2 years ago
README.md chore: Fix/latest keycloak updates (#572) 5 months ago
poetry.lock chore: upgrade deps 4 months ago
pyproject.toml feat: Async feature (#566) 5 months ago
test_keycloak_init.sh test: Test with multiple Keycloak versions (#418) 2 years ago
tox.env feat: Async feature (#566) 5 months ago
tox.ini feat: functions for updating resource permissions and getting associated policies for a permission (#574) 5 months ago

README.md

CircleCI Documentation Status

Python Keycloak

python-keycloak is a Python package providing access to the Keycloak API.

Installation

Install via PyPI:

$ pip install python-keycloak

Bug reports

Please report bugs and feature requests at https://github.com/marcospereirampj/python-keycloak/issues

Documentation

The documentation for python-keycloak is available on readthedocs.

Keycloak version support

The library strives to always support Keycloak's latest version. Additionally to that, we also support 5 latest major versions of Keycloak, in order to give our user base more time for smoother upgrades.

Current list of supported Keycloak versions:

  • 25.X
  • 24.X
  • 23.X
  • 22.X
  • 21.X

Python version support

We only support Python versions that have active or security support by the Python Software Foundation. You can find the list of active Python versions here.

Example of Using Keycloak OpenID

from keycloak import KeycloakOpenID

# Configure client
keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/auth/",
                                 client_id="example_client",
                                 realm_name="example_realm",
                                 client_secret_key="secret")

# Get WellKnown
config_well_known = keycloak_openid.well_known()

# Get Code With Oauth Authorization Request
auth_url = keycloak_openid.auth_url(
    redirect_uri="your_call_back_url",
    scope="email",
    state="your_state_info")

# Get Access Token With Code
access_token = keycloak_openid.token(
    grant_type='authorization_code',
    code='the_code_you_get_from_auth_url_callback',
    redirect_uri="your_call_back_url")


# Get Token
token = keycloak_openid.token("user", "password")
token = keycloak_openid.token("user", "password", totp="012345")

# Get token using Token Exchange
token = keycloak_openid.exchange_token(token['access_token'], "my_client", "other_client", "some_user")

# Get Userinfo
userinfo = keycloak_openid.userinfo(token['access_token'])

# Refresh token
token = keycloak_openid.refresh_token(token['refresh_token'])

# Logout
keycloak_openid.logout(token['refresh_token'])

Example of Using Keycloak Admin API

from keycloak import KeycloakAdmin
from keycloak import KeycloakOpenIDConnection

keycloak_connection = KeycloakOpenIDConnection(
                        server_url="http://localhost:8080/",
                        username='example-admin',
                        password='secret',
                        realm_name="master",
                        user_realm_name="only_if_other_realm_than_master",
                        client_id="my_client",
                        client_secret_key="client-secret",
                        verify=True)

keycloak_admin = KeycloakAdmin(connection=keycloak_connection)

# Add user
new_user = keycloak_admin.create_user({"email": "example@example.com",
                                       "username": "example@example.com",
                                       "enabled": True,
                                       "firstName": "Example",
                                       "lastName": "Example"})

# Add user and raise exception if username already exists
# exist_ok currently defaults to True for backwards compatibility reasons
new_user = keycloak_admin.create_user({"email": "example@example.com",
                                       "username": "example@example.com",
                                       "enabled": True,
                                       "firstName": "Example",
                                       "lastName": "Example"},
                                      exist_ok=False)

# Add user and set password
new_user = keycloak_admin.create_user({"email": "example@example.com",
                                       "username": "example@example.com",
                                       "enabled": True,
                                       "firstName": "Example",
                                       "lastName": "Example",
                    "credentials": [{"value": "secret","type": "password",}]})

For more details, see the documentation available on readthedocs.