Skip to content

Commit 4ceea76

Browse files
committed
Updating README
1 parent ab6858b commit 4ceea76

File tree

1 file changed

+89
-83
lines changed

1 file changed

+89
-83
lines changed

README.md

+89-83
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
[![CircleCI](https://github.com/marcospereirampj/python-keycloak/actions/workflows/daily.yaml/badge.svg)](https://github.com/marcospereirampj/python-keycloak/)
21
[![Documentation Status](https://readthedocs.org/projects/python-keycloak/badge/?version=latest)](http://python-keycloak.readthedocs.io/en/latest/?badge=latest)
32

3+
# Async Pilot Keycloak fork
4+
This repo is a fork of https://github.com/marcospereirampj/python-keycloak at version 2.9.0 by Indoc Research to support async.
5+
46
# Python Keycloak
57

68
For review- see https://github.com/marcospereirampj/python-keycloak
@@ -15,14 +17,14 @@ For review- see https://github.com/marcospereirampj/python-keycloak
1517

1618
### Manually
1719

18-
`$ python setup.py install`
20+
`$ pip install .`
1921

2022
## Dependencies
2123

2224
python-keycloak depends on:
2325

2426
- Python 3
25-
- [requests](https://requests.readthedocs.io)
27+
- [httpx](https://www.python-httpx.org/)
2628
- [python-jose](http://python-jose.readthedocs.io/en/latest/)
2729
- [urllib3](https://urllib3.readthedocs.io/en/stable/)
2830

@@ -70,73 +72,76 @@ keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/auth/",
7072
client_secret_key="secret")
7173

7274
# Get WellKnow
73-
config_well_known = keycloak_openid.well_known()
75+
config_well_known = await keycloak_openid.well_known()
7476

7577
# Get Code With Oauth Authorization Request
76-
auth_url = keycloak_openid.auth_url(
78+
auth_url = await keycloak_openid.auth_url(
7779
redirect_uri="your_call_back_url",
7880
scope="email",
7981
state="your_state_info")
8082

8183
# Get Access Token With Code
82-
access_token = keycloak_openid.token(
84+
access_token = await keycloak_openid.token(
8385
grant_type='authorization_code',
8486
code='the_code_you_get_from_auth_url_callback',
8587
redirect_uri="your_call_back_url")
8688

8789

8890
# Get Token
89-
token = keycloak_openid.token("user", "password")
90-
token = keycloak_openid.token("user", "password", totp="012345")
91+
token = await keycloak_openid.token("user", "password")
92+
token = await keycloak_openid.token("user", "password", totp="012345")
9193

9294
# Get token using Token Exchange
93-
token = keycloak_openid.exchange_token(token['access_token'], "my_client", "other_client", "some_user")
95+
token = await keycloak_openid.exchange_token(token['access_token'], "my_client", "other_client", "some_user")
9496

9597
# Get Userinfo
96-
userinfo = keycloak_openid.userinfo(token['access_token'])
98+
userinfo = await keycloak_openid.userinfo(token['access_token'])
9799

98100
# Refresh token
99-
token = keycloak_openid.refresh_token(token['refresh_token'])
101+
token = await keycloak_openid.refresh_token(token['refresh_token'])
100102

101103
# Logout
102-
keycloak_openid.logout(token['refresh_token'])
104+
await keycloak_openid.logout(token['refresh_token'])
103105

104106
# Get Certs
105-
certs = keycloak_openid.certs()
107+
certs = await keycloak_openid.certs()
106108

107109
# Get RPT (Entitlement)
108-
token = keycloak_openid.token("user", "password")
109-
rpt = keycloak_openid.entitlement(token['access_token'], "resource_id")
110+
token = await keycloak_openid.token("user", "password")
111+
rpt = await keycloak_openid.entitlement(token['access_token'], "resource_id")
110112

111113
# Instropect RPT
112-
token_rpt_info = keycloak_openid.introspect(keycloak_openid.introspect(token['access_token'], rpt=rpt['rpt'],
114+
token_rpt_info = await keycloak_openid.introspect(keycloak_openid.introspect(token['access_token'], rpt=rpt['rpt'],
113115
token_type_hint="requesting_party_token"))
114116

115117
# Introspect Token
116-
token_info = keycloak_openid.introspect(token['access_token'])
118+
token_info = await keycloak_openid.introspect(token['access_token'])
117119

118120
# Decode Token
119121
KEYCLOAK_PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\n" + keycloak_openid.public_key() + "\n-----END PUBLIC KEY-----"
120122
options = {"verify_signature": True, "verify_aud": True, "verify_exp": True}
121-
token_info = keycloak_openid.decode_token(token['access_token'], key=KEYCLOAK_PUBLIC_KEY, options=options)
123+
token_info = await keycloak_openid.decode_token(token['access_token'], key=KEYCLOAK_PUBLIC_KEY, options=options)
122124

123125
# Get permissions by token
124-
token = keycloak_openid.token("user", "password")
125-
keycloak_openid.load_authorization_config("example-authz-config.json")
126-
policies = keycloak_openid.get_policies(token['access_token'], method_token_info='decode', key=KEYCLOAK_PUBLIC_KEY)
127-
permissions = keycloak_openid.get_permissions(token['access_token'], method_token_info='introspect')
126+
token = await keycloak_openid.token("user", "password")
127+
await keycloak_openid.load_authorization_config("example-authz-config.json")
128+
await policies = keycloak_openid.get_policies(token['access_token'], method_token_info='decode', key=KEYCLOAK_PUBLIC_KEY)
129+
await permissions = keycloak_openid.get_permissions(token['access_token'], method_token_info='introspect')
128130

129131
# Get UMA-permissions by token
130-
token = keycloak_openid.token("user", "password")
131-
permissions = keycloak_openid.uma_permissions(token['access_token'])
132+
# Currently unsupported for async version
133+
# token = keycloak_openid.token("user", "password")
134+
# permissions = keycloak_openid.uma_permissions(token['access_token'])
132135

133136
# Get UMA-permissions by token with specific resource and scope requested
134-
token = keycloak_openid.token("user", "password")
135-
permissions = keycloak_openid.uma_permissions(token['access_token'], permissions="Resource#Scope")
137+
# Currently unsupported for async version
138+
# token = keycloak_openid.token("user", "password")
139+
# permissions = keycloak_openid.uma_permissions(token['access_token'], permissions="Resource#Scope")
136140

137141
# Get auth status for a specific resource and scope by token
138-
token = keycloak_openid.token("user", "password")
139-
auth_status = keycloak_openid.has_uma_access(token['access_token'], "Resource#Scope")
142+
# Currently unsupported for async version
143+
# token = keycloak_openid.token("user", "password")
144+
# auth_status = keycloak_openid.has_uma_access(token['access_token'], "Resource#Scope")
140145

141146

142147
# KEYCLOAK ADMIN
@@ -150,33 +155,34 @@ keycloak_admin = KeycloakAdmin(server_url="http://localhost:8080/auth/",
150155
user_realm_name="only_if_other_realm_than_master",
151156
client_secret_key="client-secret",
152157
verify=True)
158+
await keycloak_admin.connect()
153159

154160
# Add user
155-
new_user = keycloak_admin.create_user({"email": "[email protected]",
161+
new_user = await keycloak_admin.create_user({"email": "[email protected]",
156162
"username": "[email protected]",
157163
"enabled": True,
158164
"firstName": "Example",
159165
"lastName": "Example"})
160166

161167
# Add user and raise exception if username already exists
162168
# exist_ok currently defaults to True for backwards compatibility reasons
163-
new_user = keycloak_admin.create_user({"email": "[email protected]",
169+
new_user = await keycloak_admin.create_user({"email": "[email protected]",
164170
"username": "[email protected]",
165171
"enabled": True,
166172
"firstName": "Example",
167173
"lastName": "Example"},
168174
exist_ok=False)
169175

170176
# Add user and set password
171-
new_user = keycloak_admin.create_user({"email": "[email protected]",
177+
new_user = await keycloak_admin.create_user({"email": "[email protected]",
172178
"username": "[email protected]",
173179
"enabled": True,
174180
"firstName": "Example",
175181
"lastName": "Example",
176182
"credentials": [{"value": "secret","type": "password",}]})
177183

178184
# Add user and specify a locale
179-
new_user = keycloak_admin.create_user({"email": "[email protected]",
185+
new_user = await keycloak_admin.create_user({"email": "[email protected]",
180186
"username": "[email protected]",
181187
"enabled": True,
182188
"firstName": "Example",
@@ -186,92 +192,92 @@ new_user = keycloak_admin.create_user({"email": "[email protected]",
186192
}})
187193

188194
# User counter
189-
count_users = keycloak_admin.users_count()
195+
count_users = await keycloak_admin.users_count()
190196

191197
# Get users Returns a list of users, filtered according to query parameters
192-
users = keycloak_admin.get_users({})
198+
users = await keycloak_admin.get_users({})
193199

194200
# Get user ID from username
195-
user_id_keycloak = keycloak_admin.get_user_id("username-keycloak")
201+
user_id_keycloak = await keycloak_admin.get_user_id("username-keycloak")
196202

197203
# Get User
198-
user = keycloak_admin.get_user("user-id-keycloak")
204+
user = await keycloak_admin.get_user("user-id-keycloak")
199205

200206
# Update User
201-
response = keycloak_admin.update_user(user_id="user-id-keycloak",
207+
response = await keycloak_admin.update_user(user_id="user-id-keycloak",
202208
payload={'firstName': 'Example Update'})
203209

204210
# Update User Password
205-
response = keycloak_admin.set_user_password(user_id="user-id-keycloak", password="secret", temporary=True)
211+
response = await keycloak_admin.set_user_password(user_id="user-id-keycloak", password="secret", temporary=True)
206212

207213
# Get User Credentials
208-
credentials = keycloak_admin.get_credentials(user_id='user_id')
214+
credentials = await keycloak_admin.get_credentials(user_id='user_id')
209215

210216
# Get User Credential by ID
211-
credential = keycloak_admin.get_credential(user_id='user_id', credential_id='credential_id')
217+
credential = await keycloak_admin.get_credential(user_id='user_id', credential_id='credential_id')
212218

213219
# Delete User Credential
214-
response = keycloak_admin.delete_credential(user_id='user_id', credential_id='credential_id')
220+
response = await keycloak_admin.delete_credential(user_id='user_id', credential_id='credential_id')
215221

216222
# Delete User
217-
response = keycloak_admin.delete_user(user_id="user-id-keycloak")
223+
response = await keycloak_admin.delete_user(user_id="user-id-keycloak")
218224

219225
# Get consents granted by the user
220-
consents = keycloak_admin.consents_user(user_id="user-id-keycloak")
226+
consents = await keycloak_admin.consents_user(user_id="user-id-keycloak")
221227

222228
# Send User Action
223-
response = keycloak_admin.send_update_account(user_id="user-id-keycloak",
229+
response = await keycloak_admin.send_update_account(user_id="user-id-keycloak",
224230
payload=['UPDATE_PASSWORD'])
225231

226232
# Send Verify Email
227-
response = keycloak_admin.send_verify_email(user_id="user-id-keycloak")
233+
response = await keycloak_admin.send_verify_email(user_id="user-id-keycloak")
228234

229235
# Get sessions associated with the user
230-
sessions = keycloak_admin.get_sessions(user_id="user-id-keycloak")
236+
sessions = await keycloak_admin.get_sessions(user_id="user-id-keycloak")
231237

232238
# Get themes, social providers, auth providers, and event listeners available on this server
233-
server_info = keycloak_admin.get_server_info()
239+
server_info = await keycloak_admin.get_server_info()
234240

235241
# Get clients belonging to the realm Returns a list of clients belonging to the realm
236-
clients = keycloak_admin.get_clients()
242+
clients = await keycloak_admin.get_clients()
237243

238244
# Get client - id (not client-id) from client by name
239-
client_id = keycloak_admin.get_client_id("my-client")
245+
client_id = await keycloak_admin.get_client_id("my-client")
240246

241247
# Get representation of the client - id of client (not client-id)
242-
client = keycloak_admin.get_client(client_id="client_id")
248+
client = await keycloak_admin.get_client(client_id="client_id")
243249

244250
# Get all roles for the realm or client
245-
realm_roles = keycloak_admin.get_realm_roles()
251+
realm_roles = await keycloak_admin.get_realm_roles()
246252

247253
# Get all roles for the client
248-
client_roles = keycloak_admin.get_client_roles(client_id="client_id")
254+
client_roles = await keycloak_admin.get_client_roles(client_id="client_id")
249255

250256
# Get client role
251-
role = keycloak_admin.get_client_role(client_id="client_id", role_name="role_name")
257+
role = await keycloak_admin.get_client_role(client_id="client_id", role_name="role_name")
252258

253259
# Warning: Deprecated
254260
# Get client role id from name
255-
role_id = keycloak_admin.get_client_role_id(client_id="client_id", role_name="test")
261+
role_id = await keycloak_admin.get_client_role_id(client_id="client_id", role_name="test")
256262

257263
# Create client role
258-
keycloak_admin.create_client_role(client_role_id='client_id', payload={'name': 'roleName', 'clientRole': True})
264+
await keycloak_admin.create_client_role(client_role_id='client_id', payload={'name': 'roleName', 'clientRole': True})
259265

260266
# Assign client role to user. Note that BOTH role_name and role_id appear to be required.
261-
keycloak_admin.assign_client_role(client_id="client_id", user_id="user_id", role_id="role_id", role_name="test")
267+
await keycloak_admin.assign_client_role(client_id="client_id", user_id="user_id", role_id="role_id", role_name="test")
262268

263269
# Retrieve client roles of a user.
264-
keycloak_admin.get_client_roles_of_user(user_id="user_id", client_id="client_id")
270+
await keycloak_admin.get_client_roles_of_user(user_id="user_id", client_id="client_id")
265271

266272
# Retrieve available client roles of a user.
267-
keycloak_admin.get_available_client_roles_of_user(user_id="user_id", client_id="client_id")
273+
await keycloak_admin.get_available_client_roles_of_user(user_id="user_id", client_id="client_id")
268274

269275
# Retrieve composite client roles of a user.
270-
keycloak_admin.get_composite_client_roles_of_user(user_id="user_id", client_id="client_id")
276+
await keycloak_admin.get_composite_client_roles_of_user(user_id="user_id", client_id="client_id")
271277

272278
# Delete client roles of a user.
273-
keycloak_admin.delete_client_roles_of_user(client_id="client_id", user_id="user_id", roles={"id": "role-id"})
274-
keycloak_admin.delete_client_roles_of_user(client_id="client_id", user_id="user_id", roles=[{"id": "role-id_1"}, {"id": "role-id_2"}])
279+
await keycloak_admin.delete_client_roles_of_user(client_id="client_id", user_id="user_id", roles={"id": "role-id"})
280+
await keycloak_admin.delete_client_roles_of_user(client_id="client_id", user_id="user_id", roles=[{"id": "role-id_1"}, {"id": "role-id_2"}])
275281

276282
# Get all client authorization resources
277283
client_resources = get_client_authz_resources(client_id="client_id")
@@ -286,62 +292,62 @@ client_permissions = get_client_authz_permissions(client_id="client_id")
286292
client_policies = get_client_authz_policies(client_id="client_id")
287293

288294
# Create new group
289-
group = keycloak_admin.create_group({"name": "Example Group"})
295+
group = await keycloak_admin.create_group({"name": "Example Group"})
290296

291297
# Get all groups
292-
groups = keycloak_admin.get_groups()
298+
groups = await keycloak_admin.get_groups()
293299

294300
# Get group
295-
group = keycloak_admin.get_group(group_id='group_id')
301+
group = await keycloak_admin.get_group(group_id='group_id')
296302

297303
# Get group by name
298-
group = keycloak_admin.get_group_by_path(path='/group/subgroup', search_in_subgroups=True)
304+
group = await keycloak_admin.get_group_by_path(path='/group/subgroup', search_in_subgroups=True)
299305

300306
# Function to trigger user sync from provider
301307
sync_users(storage_id="storage_di", action="action")
302308

303309
# Get client role id from name
304-
role_id = keycloak_admin.get_client_role_id(client_id=client_id, role_name="test")
310+
role_id = await keycloak_admin.get_client_role_id(client_id=client_id, role_name="test")
305311

306312
# Get all roles for the realm or client
307-
realm_roles = keycloak_admin.get_roles()
313+
realm_roles = await keycloak_admin.get_roles()
308314

309315
# Assign client role to user. Note that BOTH role_name and role_id appear to be required.
310-
keycloak_admin.assign_client_role(client_id=client_id, user_id=user_id, role_id=role_id, role_name="test")
316+
await keycloak_admin.assign_client_role(client_id=client_id, user_id=user_id, role_id=role_id, role_name="test")
311317

312318
# Assign realm roles to user
313-
keycloak_admin.assign_realm_roles(user_id=user_id, roles=realm_roles)
319+
await keycloak_admin.assign_realm_roles(user_id=user_id, roles=realm_roles)
314320

315321
# Assign realm roles to client's scope
316-
keycloak_admin.assign_realm_roles_to_client_scope(client_id=client_id, roles=realm_roles)
322+
await keycloak_admin.assign_realm_roles_to_client_scope(client_id=client_id, roles=realm_roles)
317323

318324
# Get realm roles assigned to client's scope
319-
keycloak_admin.get_realm_roles_of_client_scope(client_id=client_id)
325+
await keycloak_admin.get_realm_roles_of_client_scope(client_id=client_id)
320326

321327
# Remove realm roles assigned to client's scope
322-
keycloak_admin.delete_realm_roles_of_client_scope(client_id=client_id, roles=realm_roles)
328+
await keycloak_admin.delete_realm_roles_of_client_scope(client_id=client_id, roles=realm_roles)
323329

324-
another_client_id = keycloak_admin.get_client_id("my-client-2")
330+
another_client_id = await keycloak_admin.get_client_id("my-client-2")
325331

326332
# Assign client roles to client's scope
327-
keycloak_admin.assign_client_roles_to_client_scope(client_id=another_client_id, client_roles_owner_id=client_id, roles=client_roles)
333+
await keycloak_admin.assign_client_roles_to_client_scope(client_id=another_client_id, client_roles_owner_id=client_id, roles=client_roles)
328334

329335
# Get client roles assigned to client's scope
330-
keycloak_admin.get_client_roles_of_client_scope(client_id=another_client_id, client_roles_owner_id=client_id)
336+
await keycloak_admin.get_client_roles_of_client_scope(client_id=another_client_id, client_roles_owner_id=client_id)
331337

332338
# Remove client roles assigned to client's scope
333-
keycloak_admin.delete_client_roles_of_client_scope(client_id=another_client_id, client_roles_owner_id=client_id, roles=client_roles)
339+
await keycloak_admin.delete_client_roles_of_client_scope(client_id=another_client_id, client_roles_owner_id=client_id, roles=client_roles)
334340

335341
# Get all ID Providers
336-
idps = keycloak_admin.get_idps()
342+
idps = await keycloak_admin.get_idps()
337343

338344
# Create a new Realm
339-
keycloak_admin.create_realm(payload={"realm": "demo"}, skip_exists=False)
345+
await keycloak_admin.create_realm(payload={"realm": "demo"}, skip_exists=False)
340346

341347
# Changing Realm
342-
keycloak_admin = KeycloakAdmin(realm_name="main", ...)
343-
keycloak_admin.get_users() # Get user in main realm
344-
keycloak_admin.realm_name = "demo" # Change realm to 'demo'
345-
keycloak_admin.get_users() # Get users in realm 'demo'
346-
keycloak_admin.create_user(...) # Creates a new user in 'demo'
348+
await keycloak_admin = KeycloakAdmin(realm_name="main", ...)
349+
await keycloak_admin.get_users() # Get user in main realm
350+
await keycloak_admin.realm_name = "demo" # Change realm to 'demo'
351+
await keycloak_admin.get_users() # Get users in realm 'demo'
352+
await keycloak_admin.create_user(...) # Creates a new user in 'demo'
347353
```

0 commit comments

Comments
 (0)