有一些 Ansible 剧本通过 REST API 执行 Keycloak 实例的运行时配置。剧本使用 OIDC 获取身份验证令牌。它在获取令牌时使用用户名 + 密码(或 X.509 证书)进行身份验证,然后使用上述令牌执行必要的管理任务。
这些剧本可能在 Keycloak 安装很久之后才会执行,所以它不仅仅是一个初始化。
问题在于必须设置密码过期策略(为一个有限的数字),并最终强制 Ansible 使用的“配置管理”用户更改密码,并且在更改密码之前,拒绝提供身份验证令牌。
在这种情况下,Keycloak 的响应是:
{
"error": "invalid_grant",
"error_description": "Account is not fully set up"
}
如果我登录 GUI 并在显示的表单上更改密码,它就会再次工作,但我该如何解决这个问题?如果我尝试做同样的事情通过 REST API 更改密码的过程,然后我也会被拒绝,因为密码已过期。
我尝试设置 X.509 身份验证,但仍然不能解决问题,因为当密码过期时,它仍然会拒绝身份验证令牌,无论证书有效期有多长。
答案1
我曾经遇到过类似的问题,并且在为我生成令牌的同时将我的领域更改为主领域。