如何为FastAPI-Keycloak的Admin Token添加resource_access字段
问题描述
我通过Docker运行KeyCloak:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.1 start-dev
随后创建了域dialog-test和客户端non-commercial-purchase-public。现在我需要获取Admin Token,执行了以下curl命令:
curl --location --request POST 'http://localhost:8080/realms/dialog-test/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=admin-cli' \ --data-urlencode 'client_secret=oCPory1e8KD8xjNlmDSOClKo0I9CNipu' \ --data-urlencode 'grant_type=client_credentials'
但返回的Token中不包含resource_access字段(我需要该字段是因为fastapi-keycloak库要求它),返回结果如下:
{ "exp": 1692114608, "iat": 1692114308, "jti": "01aae75e-7145-4790-b076-390fde8eb93c", "iss": "http://localhost:8080/realms/dialog-test", "sub": "5b2933cb-3dd9-43b7-8890-a1e9d523a08b", "typ": "Bearer", "azp": "admin-cli", "acr": "1", // "resource_access": {"realm-management": "...", "account": "..."} <<- 未返回,仅能看到"admin-cli" "scope": "profile email", "email_verified": false, "clientHost": "172.17.0.1", "preferred_username": "service-account-admin-cli", "clientAddress": "172.17.0.1", "client_id": "admin-cli" }
请问该如何添加这个字段?
解决方法
要让admin-cli客户端获取的Token包含resource_access字段,需为其服务账号分配对应角色,操作步骤如下:
- 登录KeyCloak管理控制台:访问
http://localhost:8080/admin,使用初始账号admin/admin登录。 - 切换到目标域:在控制台顶部的域选择器中切换至
dialog-test域。 - 打开
admin-cli客户端配置:进入客户端菜单,搜索并打开admin-cli的配置页面。 - 启用服务账号:在
设置标签页中,将服务账号启用选项设为开启,保存更改。 - 分配角色:
- 切换到
服务账号角色标签页。 - 在
可用角色下拉框中选择realm-management,将所需角色(如admin、manage-clients等)添加到已分配角色列表。 - 若需访问其他客户端权限,可在下拉框中选择对应客户端,分配其角色。
- 切换到
- 重新获取Token:再次执行之前的curl命令,此时返回的Token会包含
resource_access字段,其中包含已分配的角色信息。
若需要resource_access中包含account客户端权限,同样需为admin-cli的服务账号分配account客户端的对应角色。
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

