Keycloak 22.0.3 API调用异常:get_users触发TypeError错误
解决KeycloakAdmin调用get_users的TypeError错误
错误原因
你把access_token直接传给了get_users方法,但这个方法的参数是用户过滤查询字典(比如分页、用户名过滤等),不是access_token。而且你初始化KeycloakAdmin时已经传入了用户名和密码,库会自动帮你获取、管理token,根本不需要手动传token进去。
错误栈里的argument after ** must be a mapping, not str,就是因为你传了字符串类型的token,而方法内部期望用**解包一个字典参数。
修复方案
方案1:直接使用初始化好的KeycloakAdmin实例(推荐)
删掉手动传token的代码,直接调用get_users,库会自动处理token逻辑:
# 初始化部分保持不变 keycloak_admin = KeycloakAdmin(server_url="http://0.0.0.0:8080/", username="admin", password="admin", realm_name="master", client_id="admin-cli", verify=False) # 直接调用get_users,不需要传access_token users = keycloak_admin.get_users() # 后续打印用户代码不变 for user in users: print(f"User ID: {user['id']}") print(f"Username: {user['username']}") print(f"Email: {user.get('email', 'N/A')}") print("------") keycloak_admin.logout()
如果需要过滤用户(比如只查特定用户名、分页),可以传查询字典:
# 示例:查询用户名包含"test"的用户,最多返回10条 users = keycloak_admin.get_users({"username": "test", "max": 10})
方案2:用手动获取的token初始化KeycloakAdmin
如果你想自己管理token,初始化时不要传用户名密码,而是传入token参数:
import requests from keycloak import KeycloakAdmin # 先手动获取token(这部分代码保留) url = "http://0.0.0.0:8080/realms/master/protocol/openid-connect/token" data = { 'client_id': 'admin-cli', 'grant_type': 'password', 'username': 'admin', 'password': 'admin', 'client_secret': 'YTC8x190ZsrV0pQZAWRqXPw9pKlbzniQ' } response = requests.post(url, data=data, verify=False) if response.status_code == 200: token_data = response.json() access_token = token_data['access_token'] else: print('Failed to retrieve the access token. Status code:', response.status_code) exit() # 用token初始化KeycloakAdmin,不要传username和password keycloak_admin = KeycloakAdmin(server_url="http://0.0.0.0:8080/", realm_name="master", client_id="admin-cli", token=access_token, verify=False) # 调用get_users,仍然不需要传token users = keycloak_admin.get_users() # 后续打印和登出代码不变 for user in users: print(f"User ID: {user['id']}") print(f"Username: {user['username']}") print(f"Email: {user.get('email', 'N/A')}") print("------") keycloak_admin.logout()
内容的提问来源于stack exchange,提问作者tascio
相关产品推荐
相关产品推荐

