keycloak 中的“参数 client_assertion_type 丢失”

Posted

技术标签:

【中文标题】keycloak 中的“参数 client_assertion_type 丢失”【英文标题】:"Parameter client_assertion_type is missing" in keycloak 【发布时间】:2018-01-07 18:28:12 【问题描述】:

我正在尝试从超级用户那里获取访​​问令牌,以便我可以在 key cloak 中创建新用户,我已经在 wildfly 中部署了 keycloak,当我尝试进行 get 调用时,我收到了 @987654327 @作为回应, 如何知道实际凭证?

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

由于我是新手,也无法从互联网上找到足够的信息,因此我们将不胜感激。

更新:

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

【问题讨论】:

使用 Keycloak Java 客户端库 keycloak-admin-client 创建新用户。 @ravthiru ...但我需要超级用户的访问令牌 @ravthiru ...我检查了文档,没有提到超级用户密码是什么 您是否尝试过使用默认值 username=admin 和 password=password 是的,仍然获得无效凭据 【参考方案1】:

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

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

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

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

【讨论】:

你好。你在哪里使用--keystore【参考方案2】:

供您参考,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 是不可能的。 这意味着用于反向通道客户端-keycloak 通信,而不是用于 用户身份验证。

解决方案

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

我已经用新的错误描述更新了问题,请检查 它还显示“无效客户端”。可能是你拼错了它的名字? 它是正确的,突然开始出现这个错误 嗨,当您查看 keycloaks 代码时,您会看到,client_assertion_type 可以具有值 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer' 并且当您传递它(或者当需要时)你还需要传递 client_assertion,它应该包含一个“信号令牌”。当您的配置中设置了“签名令牌”时,KeyCloak 需要此参数。因此,它必须在您的领域或 Web 应用程序中的 JSON 中设置。请提供以供进一步调查 @ subrob ........我已经添加了注册访问令牌,现在问题来了...... "error_description": "Client authentication with signed JWT failed: Can '不识别客户端。在 JWT 令牌上缺少颁发者", "error": "unauthorized_client"

以上是关于keycloak 中的“参数 client_assertion_type 丢失”的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器中的 Keycloak + 主机上的 MySQL 提供 [org.keycloak.services] (ServerService 线程池 -- 62) 无法连接到数据库

如何使用反向代理修复 Keycloak 中的“我们很抱歉需要 HTTPS”?

从 Java 代码中搜索 Keycloak 中的用户

为啥 keycloak 会删除重定向 uri 中的 SSL?

springboot 应用程序中的 keycloak.json 文件

拦截器中的 axios react-keycloak/web 令牌