为什么KEYCLOAK隐藏用户部分下的用户? [英] Why does keycloak hide the "Service-account-admin-cli" user under "Users" section?
问题描述
我尝试调用KeyCloak的睡觉接口在某个领域下创建新用户,并遵循以下教程: https://www.appsdeveloperblog.com/keycloak-rest-api-create-a-new-user/
我能够按如下方式配置Admin-cli
客户端:
并且我能够通过使用客户端ID和密钥获得访问令牌:
但是,当我使用承载令牌向/auth/admin/realms/myapp/users
发出POST请求时,它无法创建用户,并收到";unnow_error";
我搜索了互联网、社区和文档,但没有任何线索。最终,经过数小时的尝试,我找到了一个解决方案:
您需要首先转到客户端-->;admin_cli-->;会话: 然后单击用户";service-account-admin-cli";并将其配置为具有管理员角色然后,上一个POST请求将成功创建新用户。
我不明白为什么此用户";service-account-admin-cli";隐藏在Users部分下:为什么要隐藏它?人们应该如何找到该用户(service-account-admin-cli)并对其进行配置?keyloak是否希望人们通过单击客户端-->;admin_cli-->;会话来找到它,然后从那里看到用户??
推荐答案
如果开始学习密钥罩,应避免使用MASTER领域,或者在没有非常充分的理由的情况下更改ADMIN_CLI配置。
从Keycloak文档可以阅读:
当您第一次启动Keyloak时,Keyloak会创建一个 为您预定义的领域。这个初始域是主域。它 是领域层次结构中的最高级别。管理员帐户位于 此域有权查看和管理创建的任何其他域 在服务器实例上。定义初始管理员帐户时, 您可以在主域中创建帐户。您首次登录到 管理控制台也将通过主领域。我们建议您不要使用主领域来管理用户 和组织中的应用程序。保留使用主领域 用于超级管理员在您的系统中创建和管理领域。 遵循此安全模型有助于防止意外更改和 遵循仅允许用户帐户访问以下内容的传统 成功完成其任务所需的特权和权力 当前任务。因此,您通常会创建一个不同的领域,并在那里创建用户。除非您确实要在主领域上创建用户,通常是类似admin的用户。
据说要使用Keyloak REST API创建用户,只需从admin-cli客户端请求代表admin用户的令牌,提供其名称和密码,例如:
TOKEN=$(curl -k -sS -d "client_id=admin-cli"
-d "username=$ADMIN_NAME"
-d "password=$ADMIN_PASSWORD"
-d "grant_type=password"
http://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token)
从$Token对象中提取访问令牌(让我们命名为$ACCESS_TOKEN
)。
然后按如下方式创建用户:
curl -k -sS -X POST https://$KEYCLOAK_IP/auth/admin/realms/$REALM_NAME/users
-H "Content-Type: application/json"
-H "Authorization: Bearer $ACCESS_TOKEN"
-d "$USER_JSON_DATA"
$USER_JSON_DATA
将是要创建的用户的json数据表示。默认情况下,不需要将admin角色添加到使用Keyloak部署的masteradmin。
Keyloak希望人们通过点击客户端来找到它吗-->; Admin_cli-->;会话
如果正常安装,您只需知道(如我所述)管理员的名称和密码,它无论如何都是在初始安装中配置的。
按照此设置操作,您将:
您需要首先转到客户端-->;admin_cli-->;会话:
您将看到以下内容:
现在的不同之处在于,如果您单击管理员用户&>角色,您将看到以下内容:
admin用户已经具有admin角色。不需要:
将其配置为具有管理员角色
现在,如果您完全按照所做的操作更改admin_cli配置,则需要向Service-account-admin-cli
用户添加ADMIN角色。
我无法理解为什么此用户";Service-Account-admin-cli"; 隐藏在USERS部分下:
这是一个实现细节,不幸的是,我在网上也找不到对此的解释。但我确实同意,如果没有进一步的背景,它看起来不太用户友好。现在,这就引出了一个问题,为什么教程没有警告他们的读者。
现在,如果有人猜测一下,从用户列表中隐藏该用户的原因可能是:
它不是传统意义上的真正的用户;不是用来登录Keyloak的。如果尝试设置该用户的密码,则始终会出现错误。
用户列表用于为该领域显式创建的用户,用户可以实际进行显式身份验证。换句话说,使用";Service-Account-admin-cli";表示执行对admin-cli的调用,因为当用户将Grand类型从密码更改为客户端凭据时,不再有显式的用户身份验证(即管理员用户名和密码)。因此";Service-Account-admin-cli";用作占位符。
很自然,人们可能会争辩为什么不让";Service-Account-admin-cli";在默认情况下拥有管理员角色?!但这又是实现细节,只有背后的开发人员才能证明这是合理的。
不要盲目更改admin-cli原始设置的另一个好理由。
这篇关于为什么KEYCLOAK隐藏用户部分下的用户?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!