Keycloak Get Users 返回 403 禁止

问题描述 投票:0回答:6

我使用

http://localhost:8080/auth/realms/{realm_name}/protocol/openid-connect/token endpoint
创建令牌。

grant_type=client_credentials
客户端 ID: ------------
客户端秘密:78296d38-cc82-4010-a817-65c283484e51

现在我想获得realm的用户。然后我使用令牌向

http://localhost:8080/auth/admin/realms/{realm_name}/users?username=demo
端点发送请求。 但我得到了
403 forbidden
的回应
"error": "unknown_error"
。怎么解决?

rest authentication keycloak access-token keycloak-rest-api
6个回答
46
投票

需要允许与您的客户端关联的服务帐户查看领域用户。

  1. 转到http://localhost:8080/auth/admin/{realm_name}/console/#/realms/{realm_name}/clients

  2. 选择您的客户(必须是保密客户)

  3. 在设置选项卡中,将已启用服务帐户切换为ON

  4. 单击“保存”,将出现“服务帐户角色”选项卡

  5. 在客户端角色中,选择realm_management

  6. 滚动浏览可用角色,直到可以选择 view_users

  7. 单击添加所选

你应该有这样的东西:

您的客户端现在可以通过 REST API 访问用户。


4
投票

您需要为自定义用户分配目标领域管理角色。例如。 Keycloak 版本 19.02 要分配任何领域管理角色,例如管理用户、管理客户端或领域管理员,您必须遵循以下步骤:

  1. 创建新用户
  2. 导航到用户详细信息并打开“角色映射”选项卡。
  3. 单击分配角色按钮
  4. 选择按客户过滤
  5. 您将看到前 10 个结果,点击“>”查看后 10 个结果等,或使用搜索框
  6. 选择一个目标角色

Filter by clientrealm-management roles


3
投票

创建(添加)用户

发送 POST 请求至:

http://localhost:8180/admin/realms/YOUR_REALM_NAME/users

这个身体样本:

{
"firstName":"Amir",
"lastName":"Sharafkar", "email":"[email protected]", "enabled":"true", 
"username":"sharafkar", 
"credentials":[{
"type":"password",
"value":"1234",
"temporary":false
}]}

获取所有用户

发送 GET 请求至:

http://localhost:8180/admin/realms/YOUR_REALM_NAME/users

带有“授权”键标头,其值:

Bearer {YOUR_TOKEN}

获取个人用户

发送 GET 请求至:

http://localhost:8180/admin/realms/YOUR_REALM_NAME/users/{id}

带有“授权”键标头,其值:

Bearer {YOUR_TOKEN}

不要忘记 - Keycloak“版本:20.0.2”

通过以下步骤为您的客户分配角色:

  1. 单击分配角色按钮

  1. 选择按客户过滤

  1. 最后为您的客户端添加“管理用户”角色


2
投票
  • 登录到您的 Keycloak 管理控制台并导航到“客户端 范围”部分。

  • 单击“创建”按钮创建一个新的客户端范围“openid”为
    默认。

  • 然后转到您的领域客户端选择客户端范围选项卡。

  • 然后添加 openid 范围。


1
投票

我在 quarkus 版本 18.0.2 中遇到了同样的问题:

  • 客户端“tmp”配置与“admin-cli”相同(仅名称不同)
  • 分配给生成的服务用户的“领域管理”的所有角色
  • 对用户搜索端点 (/auth/admin/realms/b2c/users/) 使用“tmp”客户端凭证令牌会导致 403
  • 使用手动创建的用户效果很好(密码凭证类型)
  • 使用“admin-cli”客户端获取客户端凭据令牌也效果很好

我在这里找到了:“client_id是属于领域大师的机密客户端”:https://github.com/keycloak/keycloak-documentation/blob/main/server_development/topics/admin-rest-api.adoc

我不知道为什么引入这个限制,但是当您从master(/auth/realms/master/protocol/openid-connect/token)获取令牌时,您就可以使用自定义客户端和所有内容很好。


0
投票

响应代码 (

403
) 表示
forbidden
,这意味着服务器已理解该请求,但您没有请求该 API 的权限。

因此,要获得查看 Keycloak 中可用的用户/组/角色的访问权限,您必须将角色映射到用户。您可以按照以下路径映射任何角色。

单击用户 --> 选择您的用户 --> 单击角色映射 --> 单击分配角色 --> 按客户端筛选 --> 选择角色并保存

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.