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.
 
 
Richard Nemeth f00f5c37dd
chore: revert deps
7 months ago
.github/workflows ci: upgrade actions (#548) 7 months ago
bin pure, not universal. 3 years ago
docs refactor: refactored decode_token 7 months ago
src/keycloak fix: removed dead code, stabilized tests 7 months ago
tests fix: removed dead code, stabilized tests 7 months ago
.gitignore chore: no envrc 9 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 7 months ago
CODEOWNERS feat: initial setup of CICD and linting 3 years ago
CONTRIBUTING.md chore: tox test install without hashes 2 years ago
LICENSE style: removed manifest, applied pre-commit hooks 2 years ago
README.md docs: spelling 7 months ago
poetry.lock chore: revert deps 7 months ago
pyproject.toml chore: updated dependencies, moved docs into separate poetry group 7 months ago
test_keycloak_init.sh test: Test with multiple Keycloak versions (#418) 2 years ago
tox.env fix: Ci/fix tests (#506) 1 year ago
tox.ini chore: updated dependencies, moved docs into separate poetry group 7 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:

  • 24.X
  • 23.X
  • 22.X
  • 21.X
  • 20.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.