You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:35:11