keycloak中出现"Parameter client_assertion_type is missing"错误。

7
我正在尝试从超级用户获取访问令牌,以便我可以使用该令牌在Keycloak中创建新用户。我已在Wildfly中部署了Keycloak,但在尝试进行获取调用时,我收到了“无效的用户凭据”作为响应。 如何知道实际凭据? enter image description here 当我尝试从控制台更新密码时,我收到以下错误消息。

enter image description here

由于我是新手,并且在互联网上没有找到足够的信息,所以任何形式的帮助都将不胜感激。

更新:

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

enter image description here


你尝试过使用默认值用户名为admin和密码为password吗? - ravthiru
是的,仍然收到无效凭据的提示。 - Jet
@Jet 请尝试将整个密码都使用大写字母+数字或标点符号(字母数字键)输入。 - Fmanin
@Fmanin ... 你的意思是从控制台吗?我已经尝试过了,得到了相同的异常重置密码失败 - Jet
@Jet 无论是通过控制台(CLI)还是用户界面(UI),您的密码至少必须包含12个字符。 - Fmanin
显示剩余3条评论
3个回答

7

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

问:登录时,我遇到一个错误:*缺少参数client_assertion_type [invalid_client]。

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

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


4
你好。你在哪里使用--keystore? - Mwangi

2
供您参考,client_assertion_type 可能是 urn:ietf:params:oauth:client-assertion-type:jwt-bearer。但是由于缺少 client_assertion,您将会遇到另一个错误。
如果 ccp-portal 是使用签名 JWT 进行客户端认证的机密客户端,则Keycloak 文档指出:

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

  • 我猜 PostMan 不可能生成 JWT。
  • 这是用于后端通道客户端-Keycloak 通信,而不是用于用户身份验证。
解决方案
  • 您可以将 admin-cli 用作 client_id,而不是您的 ccp-portal 客户端。 admin-cli 应该在为您的 ccp 领域配置的客户端列表中。您可以从 Keycloak 界面查看它们。
  • 另一个选择是在 ccp-portal 客户端配置中允许直接访问授权。
  • 最后,您可以在应用程序中使用已配置 Keycloak 客户端适配器之一的 ccp-portal 客户端,而不是使用 POSTMan。
如 subrob sugrobych 所提到的,参数应作为表单数据传递。

1
首先,当您通过REST客户端向Keycloak发布数据时,您需要将参数作为“表单”参数输入,而不是查询参数。这就是为什么您会收到“未提供参数grant_type”的奇怪错误消息,尽管您显然已经提供了该参数。同样适用于通过代码访问Keycloak API。
接下来,您需要考虑超级用户的角色。您可以分配领域角色和客户端角色。有一个名为“realm-management”的客户端,其中包含通常被视为“系统角色”的角色。您将需要使用它们。当您收到HTTP代码403时,这意味着您的用户可能缺少此客户端的某个角色。

我已经更新了问题并提供了新的错误描述,请查看。 - Jet
它还说'无效客户端'。也许你拼错了它的名字? - subrob sugrobych
突然出现了这个错误。 - Jet
1
你好,当你查看Keycloak的代码时,你会看到client_assertion_type可以有值'urn:ietf:params:oauth:client-assertion-type:jwt-bearer'。当你传递它(或者在需要时),你还需要传递client_assertion,其中应包含一个“签名令牌”。 当“签名令牌”设置在你的配置中时,KeyCloak需要这个参数。因此,它必须在你的领域或JSON网络应用程序中进行设置。请提供它以供进一步调查。 - subrob sugrobych
好的,当我在 Realm 中搜索“签名令牌”时,我没有找到它。我需要设置它吗?还是它会自动设置,我只需要使用它? - Jet
2
@subrob ........我已添加了注册访问令牌,现在出现的问题是...... {     “error_description”:“使用签名的JWT进行客户端身份验证失败:无法识别客户端。 JWT令牌上缺少发行人”,     “error”:“unauthorized_client” } - Jet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接