是否可以在没有管理员凭据的情况下创建密钥斗篷用户?

Is it possible to create keycloak users without admin credentials?

我有一个 spring 启动应用程序,它使用 keycloak 进行用户管理。但是 keycloak 实例是生产实例,我没有管理员凭据。我正在关注 keycloak 领域信息。

#Keycloak settings
keycloak.auth-server-url=https://myapp.com/auth/
keycloak.realm=project-realm
keycloak.resource=project-client
keycloak.credentials.secret=secret
keycloak.use-resource-role-mappings=true
keycloak.bearer-only=true
keycloak.ssl-required=external
auth.token.url=https://myapp.com/auth/realms/my-realm/protocol/openid-connect/token
auth.grant.type=client_credentials

当我尝试使用 keycloak rest api 执行用户管理操作时,我收到 403 Forbidden 响应。这里授权令牌是使用上面的领域凭据.

生成的
method: POST 
url:https://myapp.com/auth/realms/project-realm/protocol/openid-connect/token
contentType: application/x-www-form-urlencoded
body:
client_id: project-client
grant_type: client_credentials
client_secret: secret 

但是当我使用本地 keycloak 实例并使用 admin 凭据 生成授权令牌时,这工作正常。

method: POST 
url:http://localhost:8180/auth/realms/master/protocol/openid-connect/token
contentType: application/x-www-form-urlencoded
body:
client_id: admin-cli
grant_type: password
username: admin
password: admin

我需要知道的是我需要管理员凭据(用户名、密码)才能使用 Keycloak rest api 执行这些用户管理操作吗?还是我做错了什么?

When I try do perform user management operations using keycloak rest api I get 403 Forbidden response. Here the authorization token is generated using above realm credentials.

发生这种情况是因为

method: POST 
url:https://myapp.com/auth/realms/project-realm/protocol/openid-connect/token
contentType: application/x-www-form-urlencoded
body:
client_id: project-client
grant_type: client_credentials
client_secret: secret 

您的客户 project-client 没有适当的管理员相关角色来执行管理员休息 API 调用。

What I need to know is do I need admin credentials (username, password) to perform these user management operation using keyclaok rest api? Or am I doing something wrong?

没有。您可以与其他用户或客户一起执行这些相同的任务,只要他们具有适当的角色即可。要解决您的问题,您可以执行以下操作:

  • 转到客户端project-client所在的领域;
  • 转到客户和 select 客户 project-client;
  • 切换到选项卡 Service Account Roles;
  • Client Roles 下拉菜单中 select realm-management;
  • Select 并相应地分配角色: