keycloak中的“参数client_assertion_type缺失”

时间:2017-08-01 03:29:09

标签: java wildfly keycloak superuser

我正在尝试从超级用户获取访问令牌,以便我可以在密钥斗篷中创建新用户,我已经在wildfly中部署了keycloak,当我尝试进行get调用时,我得到了{{ 1}}作为回应, 如何知道实际凭证? enter image description here

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

enter image description here

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

更新:

现在,我将获得Invalid user credentials的新错误说明,如下所示。这里应该Parameter client_assertion_type is missing什么?

enter image description here

3 个答案:

答案 0 :(得分:2)

首先,当您通过rest客户端向keycloak发布数据时,需要输入参数作为 form 参数,而不是查询参数。这就是为什么当你明显提供它时,你得到这个奇怪的错误,即不提供参数grant_type。同样适用于通过代码访问keycloak api。

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

答案 1 :(得分:1)

This keycloak help page描述了第二个错误的最可能原因:

  

问:登录时出现错误:*参数client_assertion_type丢失[invalid_client]。

     

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

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

答案 2 :(得分:1)

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

如果ccp-portal是使用签名JWT进行客户端身份验证的机密客户端,则the Keycloak doc指出

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

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

解决方案

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

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