.. admin: Use Python Keycloak Asynchronously ================================== Asynchronous admin client ------------------------- Configure admin client ------------------------ .. code-block:: python admin = KeycloakAdmin( server_url="http://localhost:8080/", username='example-admin', password='secret', realm_name="master", user_realm_name="only_if_other_realm_than_master") Configure admin client with connection ----------------------------------------- .. code-block:: python 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) Create user asynchronously ---------------------------- .. code-block:: python new_user = await keycloak_admin.a_create_user({"email": "example@example.com", "username": "example@example.com", "enabled": True, "firstName": "Example", "lastName": "Example"}) Add user asynchronously and raise exception if username already exists ----------------------------------------------------------------------- The exist_ok currently defaults to True for backwards compatibility reasons. .. code-block:: python new_user = await keycloak_admin.a_create_user({"email": "example@example.com", "username": "example@example.com", "enabled": True, "firstName": "Example", "lastName": "Example"}, exist_ok=False) Add user asynchronously and set password ---------------------------------------- .. code-block:: python new_user = await keycloak_admin.a_create_user({"email": "example@example.com", "username": "example@example.com", "enabled": True, "firstName": "Example", "lastName": "Example", "credentials": [{"value": "secret","type": "password",}]}) Add user asynchronous and specify a locale ------------------------------------------- .. code-block:: python new_user = await keycloak_admin.a_create_user({"email": "example@example.fr", "username": "example@example.fr", "enabled": True, "firstName": "Example", "lastName": "Example", "attributes": { "locale": ["fr"] }}) Asynchronous User counter ------------------------------ .. code-block:: python count_users = await keycloak_admin.a_users_count() Get users Returns a list of users asynchronously, filtered according to query parameters ----------------------------------------------------------------------------------------- .. code-block:: python users = await keycloak_admin.a_get_users({}) Get user ID asynchronously from username ----------------------------------------- .. code-block:: python user_id_keycloak = await keycloak_admin.a_get_user_id("username-keycloak") Get user asynchronously ------------------------------ .. code-block:: python user = await keycloak_admin.a_get_user("user-id-keycloak") Update user asynchronously ------------------------------ .. code-block:: python response = await keycloak_admin.a_update_user(user_id="user-id-keycloak", payload={'firstName': 'Example Update'}) Update user password asynchronously ------------------------------------ .. code-block:: python response = await keycloak_admin.a_set_user_password(user_id="user-id-keycloak", password="secret", temporary=True) Get user credentials asynchronously ------------------------------------ .. code-block:: python credentials = await keycloak_admin.a_get_credentials(user_id='user_id') Get user credential asynchronously by ID ----------------------------------------- .. code-block:: python credential = await keycloak_admin.a_get_credential(user_id='user_id', credential_id='credential_id') Delete user credential asynchronously --------------------------------------- .. code-block:: python response = await keycloak_admin.a_delete_credential(user_id='user_id', credential_id='credential_id') Delete User asynchronously ------------------------------ .. code-block:: python response = await keycloak_admin.a_delete_user(user_id="user-id-keycloak") Get consents granted asynchronously by the user ------------------------------------------------ .. code-block:: python consents = await keycloak_admin.a_consents_user(user_id="user-id-keycloak") Send user action asynchronously --------------------------------- .. code-block:: python response = await keycloak_admin.a_send_update_account(user_id="user-id-keycloak", payload=['UPDATE_PASSWORD']) Send verify email asynchronously ---------------------------------- .. code-block:: python response = await keycloak_admin.a_send_verify_email(user_id="user-id-keycloak") Get sessions associated asynchronously with the user ----------------------------------------------------- .. code-block:: python sessions = await keycloak_admin.a_get_sessions(user_id="user-id-keycloak") Asynchronous OpenID Client =========================== Asynchronous Configure client OpenID ------------------------------------- .. code-block:: python from keycloak import KeycloakOpenID # Configure client # For versions older than 18 /auth/ must be added at the end of the server_url. keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/", client_id="example_client", realm_name="example_realm", client_secret_key="secret") Get .well_know asynchronously ------------------------------ .. code-block:: python config_well_known = await keycloak_openid.a_well_known() Get code asynchronously with OAuth authorization request --------------------------------------------------------- .. code-block:: python auth_url = await keycloak_openid.a_auth_url( redirect_uri="your_call_back_url", scope="email", state="your_state_info") Get access token asynchronously with code ---------------------------------------------- .. code-block:: python access_token = await keycloak_openid.a_token( grant_type='authorization_code', code='the_code_you_get_from_auth_url_callback', redirect_uri="your_call_back_url") Get access asynchronously token with user and password ------------------------------------------------------- .. code-block:: python token = await keycloak_openid.a_token("user", "password") token = await keycloak_openid.a_token("user", "password", totp="012345") Get token asynchronously using Token Exchange ---------------------------------------------- .. code-block:: python token = await keycloak_openid.a_exchange_token(token['access_token'], "my_client", "other_client", "some_user") Refresh token asynchronously ---------------------------------------------- .. code-block:: python token = await keycloak_openid.a_refresh_token(token['refresh_token']) Get UserInfo asynchronously ---------------------------------------------- .. code-block:: python userinfo = await keycloak_openid.a_userinfo(token['access_token']) Logout asynchronously ---------------------------------------------- .. code-block:: python await keycloak_openid.a_logout(token['refresh_token']) Get certs asynchronously ---------------------------------------------- .. code-block:: python certs = await keycloak_openid.a_certs() Introspect RPT asynchronously ---------------------------------------------- .. code-block:: python token_rpt_info = await keycloak_openid.a_introspect(await keycloak_openid.a_introspect(token['access_token'], rpt=rpt['rpt'], token_type_hint="requesting_party_token")) Introspect token asynchronously ---------------------------------------------- .. code-block:: python token_info = await keycloak_openid.a_introspect(token['access_token']) Decode token asynchronously ---------------------------------------------- .. code-block:: python token_info = await keycloak_openid.a_decode_token(token['access_token']) # Without validation token_info = await keycloak_openid.a_decode_token(token['access_token'], validate=False) Get UMA-permissions asynchronously by token ---------------------------------------------- .. code-block:: python token = await keycloak_openid.a_token("user", "password") permissions = await keycloak_openid.a_uma_permissions(token['access_token']) Get UMA-permissions asynchronously by token with specific resource and scope requested --------------------------------------------------------------------------------------- .. code-block:: python token = await keycloak_openid.a_token("user", "password") permissions = await keycloak_openid.a_uma_permissions(token['access_token'], permissions="Resource#Scope") Get auth status asynchronously for a specific resource and scope by token -------------------------------------------------------------------------- .. code-block:: python token = await keycloak_openid.a_token("user", "password") auth_status = await keycloak_openid.a_has_uma_access(token['access_token'], "Resource#Scope") Asynchronous UMA ======================== Asynchronous Configure client UMA ---------------------------------- .. code-block:: python from keycloak import KeycloakOpenIDConnection from keycloak import KeycloakUMA keycloak_connection = KeycloakOpenIDConnection( server_url="http://localhost:8080/", realm_name="master", client_id="my_client", client_secret_key="client-secret") keycloak_uma = KeycloakUMA(connection=keycloak_connection) Create a resource set asynchronously --------------------------------------- .. code-block:: python resource_set = await keycloak_uma.a_resource_set_create({ "name": "example_resource", "scopes": ["example:read", "example:write"], "type": "urn:example"}) List resource sets asynchronously ---------------------------------- .. code-block:: python resource_sets = await uma.a_resource_set_list() Get resource set asynchronously -------------------------------- .. code-block:: python latest_resource = await uma.a_resource_set_read(resource_set["_id"]) Update resource set asynchronously ------------------------------------- .. code-block:: python latest_resource["name"] = "New Resource Name" await uma.a_resource_set_update(resource_set["_id"], latest_resource) Delete resource set asynchronously ------------------------------------ .. code-block:: python await uma.a_resource_set_delete(resource_id=resource_set["_id"])