6

我正在尝试从超级用户那里获取访​​问令牌,以便我可以在 key cloak 中创建新用户,我已经在 wildfly 中部署了 keycloak,当我尝试进行 get 调用时,我得到Invalid user credentials了响应,如何知道实际凭证吗? 在此处输入图像描述

当我尝试从控制台更新密码时,我收到如下错误消息。

在此处输入图像描述

由于我对此并不陌生,并且也无法从互联网上找到足够的信息,因此我们将不胜感激任何形式的帮助。

更新:

现在我得到新的错误描述,Parameter client_assertion_type is missing如下所示。这里应该有什么client_assertion_type

在此处输入图像描述

4

3 回答 3

7

此 keycloak 帮助页面描述了第二个错误的最可能原因:

问:登录时出现错误:*Parameter client_assertion_type is missing [invalid_client]。

答:此错误表示您的客户端配置了 Signed JWT 令牌凭据,这意味着您在登录时必须使用 --keystore 参数。

或者,您可以在 Keycloak 中为客户端禁用 JWT 令牌。

于 2019-04-09T13:36:52.070 回答
2

供您参考,client_assertion_type可能是urn:ietf:params:oauth:client-assertion-type:jwt-bearer. 但是你会得到另一个错误,因为client_assertion缺少 。

如果ccp-portal是使用带有签名 JWT 的客户端身份验证的机密客户端,则Keycloak 文档指出

在身份验证期间,客户端生成 JWT 令牌并使用其私钥对其进行签名,然后在 client_assertion 参数中的特定反向通道请求(例如,代码到令牌请求)中将其发送到 Keycloak。

  • 我想用 PostMan 生成 JWT 是不可能的。
  • 这适用于反向通道客户端-keycloak 通信,而不是用于用户身份验证。

解决方案

  • 您可以使用admin-cliasclient_id代替您的ccp-portal客户端。admin-cli应该在为您的ccp领域配置的客户端列表中。您可以从 Keycloak 界面中看到这一点。
  • ccp-portal另一种选择是在客户端配置中允许直接访问授权。
  • 最后,您可以ccp-portal在配置有 Keycloak 客户端适配器之一的应用程序中使用客户端,而不是 POSTMan。

正如 subrob sugrobych 提到的,参数应该作为表单数据传递。

于 2020-05-14T07:27:49.347 回答
1

首先,当您通过休息客户端将数据发布到 keycloak 时,您需要输入参数作为表单参数,而不是作为查询参数。这就是为什么当您显然提供参数grant_type 时,您会收到这个奇怪的错误,即不提供参数grant_type。同样适用于通过代码访问 keycloak api。

接下来需要考虑的是超级用户的角色。您可以分配领域角色和客户端角色。有一个名为“领域管理”的客户端,其中包含通常被视为“系统角色”的角色。您将需要使用它们。当您收到 HTTP 代码 403 时,这意味着您的用户可能缺少此客户端的角色。

于 2017-08-16T10:20:55.663 回答