Keycloak 为什么钥匙斗篷会隐藏“钥匙”;服务帐户管理cli“;“下的用户”;“用户”;部门?

Keycloak 为什么钥匙斗篷会隐藏“钥匙”;服务帐户管理cli“;“下的用户”;“用户”;部门?,keycloak,keycloak-rest-api,Keycloak,Keycloak Rest Api,我试图调用KeyClope的REST api在一个领域下创建新用户,并遵循本教程: 我能够如下配置管理cli客户端: 我可以通过使用客户端id和密码获得访问令牌: 但是,当我使用承载令牌向/auth/admin/realms/myapp/users发出POST请求时,它无法创建用户,我收到了一个“未知错误” 我搜索了互联网、社区和文档,但没有任何线索。经过一个又一个小时的尝试,我终于找到了一个解决方案: 您需要首先转到客户端-->管理cli-->会话: 然后单击用户“Service acc

我试图调用KeyClope的REST api在一个领域下创建新用户,并遵循本教程:

我能够如下配置
管理cli
客户端: 我可以通过使用客户端id和密码获得访问令牌:

但是,当我使用承载令牌向
/auth/admin/realms/myapp/users
发出POST请求时,它无法创建用户,我收到了一个“未知错误”

我搜索了互联网、社区和文档,但没有任何线索。经过一个又一个小时的尝试,我终于找到了一个解决方案:

您需要首先转到客户端-->管理cli-->会话:

然后单击用户“Service account admin cli”并进行配置,使其具有管理员角色

然后,前一个POST请求将成功创建一个新用户

我无法理解为什么此用户“Service account admin cli”隐藏在用户部分下:


为什么它会被隐藏???人们应该如何找到此用户(Service account admin cli)并对其进行配置?Keyclope是否希望人们通过单击客户端-->管理cli-->会话来找到它,然后从那里看到用户???

IMO如果开始学习Keyclope,应该避免使用主域,或者在没有很好理由的情况下更改管理cli配置

从文档中可以看到:

当您第一次启动keydrope时,keydrope会创建一个 为您预定义的领域。这个初始领域是主领域。信息技术 是领域层次结构中的最高级别。中的管理员帐户 此域具有查看和管理创建的任何其他域的权限 在服务器实例上定义初始管理员帐户时, 您可以在主域中创建一个帐户。您首次登录到 管理控制台也将通过主域访问。

我们建议您不要使用主域来管理用户 和组织中的应用程序。保留主域的使用权 供超级管理员在系统中创建和管理领域。 遵循此安全模型有助于防止意外更改和 遵循传统,只允许用户帐户访问那些 成功完成其任务所需的特权和权力 当前任务

因此,通常您会创建一个不同的领域,并在那里创建用户。除非您真的想在主域上创建一个用户,通常是类似管理员的用户

也就是说,要使用KeyClope Rest API创建用户,只需通过提供管理员用户的名称和密码,从管理员cli客户端请求代表管理员用户的令牌,例如:

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)
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"
从$TOKEN对象中提取访问令牌(我们将其命名为
$access\u TOKEN

然后按如下方式创建用户:

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)
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\u JSON\u DATA
将是要创建的用户的JSON数据表示形式。默认情况下,无需将角色admin添加到使用KeyClope部署的主admin

KeyClope是否希望人们通过单击客户端--> 管理cli-->会话

如果安装正常,您只需要知道(正如我已经描述的)管理员的名称和密码,这是在初始安装中配置的

按照此设置,然后您可以:

您需要首先转到客户端-->管理cli-->会话:

您将看到以下内容:

现在的区别是,如果单击admin user>roles,您将看到以下内容:

管理员用户已具有管理员角色。无需:

进行配置,使其具有管理员角色

现在,如果您完全按照原来的方式更改admin_cli配置,则需要将admin角色添加到
服务帐户admin cli
用户

我无法理解为什么此用户“Service account admin cli”是 隐藏在用户部分下:

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

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

  • 它不是传统意义上的真正用户;不打算用于登录到KeyClope。如果您试图设置该用户的密码,则始终会出现错误

  • 用户列表用于为该领域显式创建的用户,用户实际上可以显式验证该领域。换句话说,“Service account admin cli”用于表示执行对admin cli的调用的“一个”,因为当用户将大类型从密码更改为客户端凭据时,就不再有显式的用户身份验证(即管理员用户名和密码)。因此,“Service account admin cli”用作占位符

  • 当然,人们可能会争论,为什么不让“Service account admin cli”在默认情况下具有管理员角色?!,但同样,只有开发人员才能证明实现细节是正确的

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