{"id":37620243,"url":"https://github.com/c0mpiler/py-keycloak","last_synced_at":"2026-01-16T10:37:34.790Z","repository":{"id":62581251,"uuid":"139775483","full_name":"c0mpiler/py-keycloak","owner":"c0mpiler","description":"py-keycloak is a Python package providing access to the Keycloak API","archived":false,"fork":false,"pushed_at":"2019-10-22T04:44:40.000Z","size":29,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-29T06:10:47.221Z","etag":null,"topics":["keycloak","oidc-client","pypi","python","python3"],"latest_commit_sha":null,"homepage":"https://github.com/c0mpiler/py-keycloak","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/c0mpiler.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-05T00:09:35.000Z","updated_at":"2018-08-06T00:50:30.000Z","dependencies_parsed_at":"2022-11-03T20:49:34.923Z","dependency_job_id":null,"html_url":"https://github.com/c0mpiler/py-keycloak","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/c0mpiler/py-keycloak","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mpiler%2Fpy-keycloak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mpiler%2Fpy-keycloak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mpiler%2Fpy-keycloak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mpiler%2Fpy-keycloak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c0mpiler","download_url":"https://codeload.github.com/c0mpiler/py-keycloak/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mpiler%2Fpy-keycloak/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keycloak","oidc-client","pypi","python","python3"],"created_at":"2026-01-16T10:37:34.659Z","updated_at":"2026-01-16T10:37:34.752Z","avatar_url":"https://github.com/c0mpiler.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![PyPI version](https://badge.fury.io/py/py-keycloak.svg?v=0.0.1.3)](https://badge.fury.io/py/py-keycloak)\n[![Documentation Status](https://readthedocs.org/projects/py-keycloak/badge/?version=latest)](http://py-keycloak.readthedocs.io/en/latest/?badge=latest)\n[![GitHub issues](https://img.shields.io/github/issues/c0mpiler/py-keycloak.svg)](https://github.com/c0mpiler/py-keycloak/issues)\n[![GitHub license](https://img.shields.io/github/license/c0mpiler/py-keycloak.svg)](https://github.com/c0mpiler/py-keycloak/blob/master/LICENSE)\n\n\n\n\n\nPython client - Keycloak\n====================\n\nFor review- see https://github.com/c0mpiler/py-keycloak\n\n**py-keycloak** is a Python package providing access to the Keycloak API.\n\n## Installation\n\n### Via Pypi Package:\n\n``` $ pip install py-keycloak ```\n\n### Manually \n\n``` $ python setup.py install ```\n\n## Dependencies\n\npy-keycloak depends on:\n\n* Python 3\n* [requests](http://docs.python-requests.org/en/master/)\n* [python-jose](http://python-jose.readthedocs.io/en/latest/)\n\n### Tests Dependencies\n\n* unittest\n* [httmock](https://github.com/patrys/httmock)\n\n## Bug reports\n\nPlease report bugs and feature requests at\nhttps://github.com/c0mpiler/py-keycloak/issues\n\n## Documentation\n\nThe documentation for py-keycloak is available on [readthedocs](http://py-keycloak.readthedocs.io).\n\n## Usage\n\n```python\nfrom keycloak import KeycloakOpenID as KeyCloak\n\n# Configure client\nkeycloak = KeyCloak(server_url=\"http://localhost:8080/auth/\",\n                    client_id=\"example_client\",\n                    realm_name=\"example_realm\",\n                    client_secret_key=\"secret\")\n\n# Get WellKnow\nconfig_well_know = keycloak.well_know()\n\n# Get Token\ntoken = keycloak.token(\"user\", \"password\")\n\n# Get Userinfo\nuserinfo = keycloak.userinfo(token['access_token'])\n\n# Refresh token\ntoken = keycloak.refresh_token(token['refresh_token'])\n\n# Logout\nkeycloak.logout(token['refresh_token'])\n\n# Get Certs\ncerts = keycloak.certs()\n\n# Get RPT (Entitlement)\ntoken = keycloak.token(\"user\", \"password\")\nrpt = keycloak.entitlement(token['access_token'], \"resource_id\")\n\n# Instropect RPT\ntoken_rpt_info = keycloak.introspect(keycloak.introspect(token['access_token'], rpt=rpt['rpt'],\n                                     token_type_hint=\"requesting_party_token\"))\n\n# Introspect Token\ntoken_info = keycloak.introspect(token['access_token']))\n\n# Decode Token\nKEYCLOAK_PUBLIC_KEY = \"secret\"\noptions = {\"verify_signature\": True, \"verify_aud\": True, \"exp\": True}\ntoken_info = keycloak.decode_token(token['access_token'], key=KEYCLOAK_PUBLIC_KEY, options=options)\n\n# Get permissions by token\ntoken = keycloak.token(\"user\", \"password\")\nkeycloak.load_authorization_config(\"example-authz-config.json\")\npolicies = keycloak.get_policies(token['access_token'], method_token_info='decode', key=KEYCLOAK_PUBLIC_KEY)\npermissions = keycloak.get_permissions(token['access_token'], method_token_info='introspect')\n\n# KEYCLOAK ADMIN\n\nfrom keycloak import KeycloakAdmin\n\nkeycloak_admin = KeycloakAdmin(server_url=\"http://localhost:8080/auth/\",\n                               username='example-admin',\n                               password='secret',\n                               realm_name=\"example_realm\",\n                               verify=True)\n\n# Add user                       \nnew_user = keycloak_admin.create_user({\"email\": \"example@example.com\",\n                    \"username\": \"example@example.com\",\n                    \"enabled\": True,\n                    \"firstName\": \"Example\",\n                    \"lastName\": \"Example\",\n                    \"realmRoles\": [\"user_default\", ],\n                    \"attributes\": {\"example\": \"1,2,3,3,\"}})    \n\n\n# Add user and set password                    \nnew_user = keycloak_admin.create_user({\"email\": \"example@example.com\",\n                    \"username\": \"example@example.com\",\n                    \"enabled\": True,\n                    \"firstName\": \"Example\",\n                    \"lastName\": \"Example\",\n                    \"credentials\": [{\"value\": \"secret\",\"type\": \"password\",}],\n                    \"realmRoles\": [\"user_default\", ],\n                    \"attributes\": {\"example\": \"1,2,3,3,\"}})                        \n\n# User counter\ncount_users = keycloak_admin.users_count()\n\n# Get users Returns a list of users, filtered according to query parameters\nusers = keycloak_admin.get_users({})\n\n# Get user ID from name\nuser-id-keycloak = keycloak_admin.get_user_id(\"example@example.com\")\n\n# Get User\nuser = keycloak_admin.get_user(\"user-id-keycloak\")\n\n# Update User\nresponse = keycloak_admin.update_user(user_id=\"user-id-keycloak\",\n                                      payload={'firstName': 'Example Update'})\n\n# Update User Password\nresponse = set_user_password(user_id=\"user-id-keycloak\", password=\"secret\", temporary=True)\n\n# Delete User\nresponse = keycloak_admin.delete_user(user_id=\"user-id-keycloak\")\n\n# Get consents granted by the user\nconsents = keycloak_admin.consents_user(user_id=\"user-id-keycloak\")\n\n# Send User Action\nresponse = keycloak_admin.send_update_account(user_id=\"user-id-keycloak\",\n                                              payload=json.dumps(['UPDATE_PASSWORD']))\n\n# Send Verify Email\nresponse = keycloak_admin.send_verify_email(user_id=\"user-id-keycloak\")\n\n# Get sessions associated with the user\nsessions = keycloak_admin.get_sessions(user_id=\"user-id-keycloak\")\n\n# Get themes, social providers, auth providers, and event listeners available on this server\nserver_info = keycloak_admin.get_server_info()\n\n# Get clients belonging to the realm Returns a list of clients belonging to the realm\nclients = keycloak_admin.get_clients()\n\n# Get client - id (not client-id) from client by name\nclient_id=keycloak_admin.get_client_id(\"my-client\")\n\n# Get representation of the client - id of client (not client-id)\nclient = keycloak_admin.get_client(client_id=\"client_id\")\n\n# Get all roles for the realm or client\nrealm_roles = keycloak_admin.get_realm_roles()\n\n# Get all roles for the client\nclient_roles = keycloak_admin.get_client_roles(client_id=\"client_id\")\n\n# Get client role\nrole = keycloak_admin.get_client_role(client_id=\"client_id\", role_name=\"role_name\")\n\n# Warning: Deprecated\n# Get client role id from name\nrole_id = keycloak_admin.get_client_role_id(client_id=\"client_id\", role_name=\"test\")\n\n# Create client role\nkeycloak_admin.create_client_role(client_id, \"test\")\n\n# Assign client role to user. Note that BOTH role_name and role_id appear to be required.\nkeycloak_admin.assign_client_role(client_id=\"client_id\", user_id=\"user_id\", role_id=\"role_id\", role_name=\"test\")\n\n# Create new group\ngroup = keycloak_admin.create_group(name=\"Example Group\")\n\n# Get all groups\ngroups = keycloak_admin.get_groups()\n\n# Get group\ngroup = keycloak_admin.get_group(group_id='group_id')\n\n# Get group by name\ngroup = keycloak_admin.get_group_by_name(name_or_path='group_id', search_in_subgroups=True)\n\n# Function to trigger user sync from provider\nsync_users(storage_id=\"storage_di\", action=\"action\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc0mpiler%2Fpy-keycloak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc0mpiler%2Fpy-keycloak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc0mpiler%2Fpy-keycloak/lists"}