为什么KEYCLOAK隐藏用户部分下的用户? [英] Why does keycloak hide the "Service-account-admin-cli" user under "Users" section?

查看:13
本文介绍了为什么KEYCLOAK隐藏用户部分下的用户?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试调用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部分下:

这是一个实现细节,不幸的是,我在网上也找不到对此的解释。但我确实同意,如果没有进一步的背景,它看起来不太用户友好。现在,这就引出了一个问题,为什么教程没有警告他们的读者。

现在,如果有人猜测一下,从用户列表中隐藏该用户的原因可能是:

  1. 它不是传统意义上的真正的用户;不是用来登录Keyloak的。如果尝试设置该用户的密码,则始终会出现错误。

  2. 用户列表用于为该领域显式创建的用户,用户可以实际进行显式身份验证。换句话说,使用";Service-Account-admin-cli";表示执行对admin-cli的调用,因为当用户将Grand类型从密码更改为客户端凭据时,不再有显式的用户身份验证(即管理员用户名和密码)。因此";Service-Account-admin-cli";用作占位符。

很自然,人们可能会争辩为什么不让";Service-Account-admin-cli";在默认情况下拥有管理员角色?!但这又是实现细节,只有背后的开发人员才能证明这是合理的。

不要盲目更改admin-cli原始设置的另一个好理由。

这篇关于为什么KEYCLOAK隐藏用户部分下的用户?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆