{ "info": { "author": "liuyang", "author_email": "liuyang@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python :: 3", "Topic :: Utilities" ], "description": "[![Documentation Status](https://readthedocs.org/projects/python-keycloak/badge/?version=latest)](http://python-keycloak.readthedocs.io/en/latest/?badge=latest)\n\nFork from: https://bitbucket.org/agriness/python-keycloak\n\nPython Keycloak\n====================\n\nFor review- see https://bitbucket.org/agriness/python-keycloak\n\n**python-keycloak** is a Python package providing access to the Keycloak API.\n\n## Installation\n\n### Via Pypi Package:\n\n``` $ pip install keycloak-client ```\n\n### Manually\n\n``` $ python setup.py install ```\n\n## Dependencies\n\npython-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://bitbucket.org/agriness/python-keycloak/issues\n\n## Documentation\n\nThe documentation for python-keycloak is available on [readthedocs](http://python-keycloak.readthedocs.io).\n\n## Contributors\n\n* [Agriness Team](http://www.agriness.com/pt/)\n* [Marcos Pereira](marcospereira.mpj@gmail.com)\n* [Martin Devlin](https://bitbucket.org/devlinmpearson/) \n* [Shon T. Urbas](https://bitbucket.org/surbas/)\n* [Markus Spanier](https://bitbucket.org/spanierm/)\n* [Remco Kranenburg](https://bitbucket.org/Remco47/)\n* [Armin](https://bitbucket.org/arminfelder/)\n* [njordr](https://bitbucket.org/njordr/)\n* [Josha Inglis](https://bitbucket.org/joshainglis/)\n* [Alex](https://bitbucket.org/alex_zel/)\n* [Ewan Jone](https://bitbucket.org/kisamoto/)\n\n## Usage\n\n```python\nfrom keycloak import KeycloakOpenID\n\n# Configure client\nkeycloak_openid = KeycloakOpenID(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_openid.well_know()\n\n# Get Token\ntoken = keycloak_openid.token(\"user\", \"password\")\ntoken = keycloak_openid.token(\"user\", \"password\", totp=\"012345\")\n\n# Get Userinfo\nuserinfo = keycloak_openid.userinfo(token['access_token'])\n\n# Refresh token\ntoken = keycloak_openid.refresh_token(token['refresh_token'])\n\n# Logout\nkeycloak_openid.logout(token['refresh_token'])\n\n# Get Certs\ncerts = keycloak_openid.certs()\n\n# Get RPT (Entitlement)\ntoken = keycloak_openid.token(\"user\", \"password\")\nrpt = keycloak_openid.entitlement(token['access_token'], \"resource_id\")\n\n# Instropect RPT\ntoken_rpt_info = keycloak_openid.introspect(keycloak_openid.introspect(token['access_token'], rpt=rpt['rpt'],\n token_type_hint=\"requesting_party_token\"))\n\n# Introspect Token\ntoken_info = keycloak_openid.introspect(token['access_token']))\n\n# Decode Token\nKEYCLOAK_PUBLIC_KEY = \"secret\"\noptions = {\"verify_signature\": True, \"verify_aud\": True, \"exp\": True}\ntoken_info = keycloak_openid.decode_token(token['access_token'], key=KEYCLOAK_PUBLIC_KEY, options=options)\n\n# Get permissions by token\ntoken = keycloak_openid.token(\"user\", \"password\")\nkeycloak_openid.load_authorization_config(\"example-authz-config.json\")\npolicies = keycloak_openid.get_policies(token['access_token'], method_token_info='decode', key=KEYCLOAK_PUBLIC_KEY)\npermissions = keycloak_openid.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 \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\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='client_id', {'name': 'roleName', 'clientRole': True})\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# Retrieve client roles of a user.\nkeycloak_admin.get_client_roles_of_user(user_id=\"user_id\", client_id=\"client_id\")\n\n# Retrieve available client roles of a user.\nkeycloak_admin.get_available_client_roles_of_user(user_id=\"user_id\", client_id=\"client_id\")\n\n# Retrieve composite client roles of a user.\nkeycloak_admin.get_composite_client_roles_of_user(user_id=\"user_id\", client_id=\"client_id\")\n\n# Delete client roles of a user.\nkeycloak_admin.delete_client_roles_of_user(client_id=\"client_id\", user_id=\"user_id\", roles={\"id\": \"role-id\"})\nkeycloak_admin.delete_client_roles_of_user(client_id=\"client_id\", user_id=\"user_id\", roles=[{\"id\": \"role-id_1\"}, {\"id\": \"role-id_2\"}])\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_path(path='/group/subgroup', search_in_subgroups=True)\n\n# Function to trigger user sync from provider\nsync_users(storage_id=\"storage_di\", action=\"action\")\n\n# Get client role id from name\nrole_id = keycloak_admin.get_client_role_id(client_id=client_id, role_name=\"test\")\n\n# Get all roles for the realm or client\nrealm_roles = keycloak_admin.get_roles()\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# Get all ID Providers\nidps = keycloak_admin.get_idps()\n\n```\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ly798/python-keycloak.git", "keywords": "keycloak openid", "license": "The MIT License", "maintainer": "", "maintainer_email": "", "name": "keycloak-client", "package_url": "https://pypi.org/project/keycloak-client/", "platform": "", "project_url": "https://pypi.org/project/keycloak-client/", "project_urls": { "Homepage": "https://github.com/ly798/python-keycloak.git" }, "release_url": "https://pypi.org/project/keycloak-client/0.15.4/", "requires_dist": null, "requires_python": "", "summary": "keycloak-client(fork from python-keycloak) is a Python package providing access to the Keycloak API.", "version": "0.15.4" }, "last_serial": 4692536, "releases": { "0.15.2": [ { "comment_text": "", "digests": { "md5": "a2c014bd2181fba53b66a9968d109a00", "sha256": "e264ebe52369ffe15d04ae8b1c9c38deaec6376b064081e4645de430f4136a62" }, "downloads": -1, "filename": "keycloak-client-0.15.2.tar.gz", "has_sig": false, "md5_digest": "a2c014bd2181fba53b66a9968d109a00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17662, "upload_time": "2019-01-11T10:25:49", "url": "https://files.pythonhosted.org/packages/54/59/f6a19333f4f16a1431ee7c6ec3f025f316160d45b75ed5e1633ef6a7e03b/keycloak-client-0.15.2.tar.gz" } ], "0.15.3": [ { "comment_text": "", "digests": { "md5": "48d06ff6f984be69775e3c94de6a3a37", "sha256": "e9d63da3371b4fbcf16766dcd24b3ae8bcc93160bdf4d9e1909e5815f4bda5be" }, "downloads": -1, "filename": "keycloak-client-0.15.3.tar.gz", "has_sig": false, "md5_digest": "48d06ff6f984be69775e3c94de6a3a37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19348, "upload_time": "2019-01-14T01:21:13", "url": "https://files.pythonhosted.org/packages/8b/56/9bbb44b73cc5c0a891e1520e5ec38e08c725df143187592d5312c82bc013/keycloak-client-0.15.3.tar.gz" } ], "0.15.4": [ { "comment_text": "", "digests": { "md5": "2bdc9b327576c3a03ff1a00d174e0306", "sha256": "09e6db0370b314264b51da4c536d6df7514d6ad722eaa4fd2df3397f37dbeeb2" }, "downloads": -1, "filename": "keycloak-client-0.15.4.tar.gz", "has_sig": false, "md5_digest": "2bdc9b327576c3a03ff1a00d174e0306", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19566, "upload_time": "2019-01-14T03:14:45", "url": "https://files.pythonhosted.org/packages/9b/2c/43b4c97b89c5f7b31a904e6080f27039b663504b727864b5d634727be46b/keycloak-client-0.15.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2bdc9b327576c3a03ff1a00d174e0306", "sha256": "09e6db0370b314264b51da4c536d6df7514d6ad722eaa4fd2df3397f37dbeeb2" }, "downloads": -1, "filename": "keycloak-client-0.15.4.tar.gz", "has_sig": false, "md5_digest": "2bdc9b327576c3a03ff1a00d174e0306", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19566, "upload_time": "2019-01-14T03:14:45", "url": "https://files.pythonhosted.org/packages/9b/2c/43b4c97b89c5f7b31a904e6080f27039b663504b727864b5d634727be46b/keycloak-client-0.15.4.tar.gz" } ] }