如何使用Python-Keycloak获取用户的角色与组信息?
使用Python-Keycloak获取用户的组与角色信息
看起来你已经在Keycloak里完成了组、角色和用户的配置,现在要在Python应用里拉取这些用户的关联信息对吧?刚好可以用python-keycloak库的管理员客户端来实现,下面是具体步骤:
首先,得确保你安装了依赖:
pip install python-keycloak
注意:这里我们要用KeycloakAdmin客户端而不是你代码里的KeycloakOpenID,因为后者主要用于用户认证拿令牌,而查询用户的组和角色属于管理操作,需要管理员权限的客户端支撑。
1. 准备Keycloak管理员客户端
先去Keycloak控制台做两件事:
- 创建一个专门用于管理的客户端(比如命名为
admin-client) - 给这个客户端分配
realm-management下的必要权限:比如view-users、query-groups、query-roles,这样它才有资格查询用户和组的信息
2. 初始化管理员客户端
把你的Keycloak配置填进去:
from keycloak import KeycloakAdmin keycloak_admin = KeycloakAdmin( server_url="http://localhost:8080/auth/", # Keycloak 17+版本请改成 http://localhost:8080/ username="你的管理员账号", password="你的管理员密码", realm_name="demo", client_id="刚才创建的管理员客户端ID", client_secret_key="管理员客户端的秘钥", verify=True # 如果是测试环境可以设为False跳过SSL验证 )
3. 获取用户所属的组
可以通过用户名先拿到用户ID,再查询组:
# 先通过用户名获取用户ID target_username = "你要查询的用户名" user_id = keycloak_admin.get_user_id(target_username) # 获取用户的所有组 user_groups = keycloak_admin.get_user_groups(user_id=user_id) # 格式化输出组信息 print("用户所属组列表:") for group in user_groups: print(f"• 组名: {group['name']} | 组ID: {group['id']}")
4. 获取用户的角色信息
用户的角色分两种:直接分配的,和通过组继承的。下面的代码可以拿到用户的所有有效角色(包括继承的):
# 获取用户的全部领域角色(含组继承) user_roles = keycloak_admin.get_user_realm_roles(user_id=user_id) # 格式化输出角色信息 print("\n用户拥有的角色列表:") for role in user_roles: desc = role.get('description', '无描述') print(f"• 角色名: {role['name']} | 描述: {desc}")
如果只想看用户直接分配的角色,可以换成这个方法:
direct_roles = keycloak_admin.get_user_direct_realm_roles(user_id=user_id)
小提示
- 如果你的Keycloak是17及以上版本,记得把
server_url里的/auth去掉,新版本已经移除了这个路径。 - 要是遇到权限报错,回去检查管理员客户端的权限有没有分配到位,确保勾选了
realm-management下的相关权限。
内容的提问来源于stack exchange,提问作者sudhanshu
相关产品推荐
相关产品推荐

