Keycloak 通过 REST API 通过哈希重置用户密码
Keycloak reset user password via REST API by hash
Keycloak 'reset-password' REST API 中使用的 CredentialRepresentation 包含哈希算法、哈希密码、哈希迭代等字段。
这意味着我可以传递散列密码及其所有散列规范,而不是将纯文本密码传递给服务。这正是我想要做的,因为传递纯文本密码感觉不对。
但是,当我尝试在没有纯文本值的情况下调用该服务时,我收到 400 错误,错误消息是缺少纯文本值。有没有办法只传递散列密码?
传入明文密码(当然是通过 HTTPS)允许 keycloak 使用领域的哈希算法策略对其进行哈希处理。
如果您想传入哈希密码值、迭代和算法,那么您还需要提供实现 PasswordHashProviderFactory 和 PasswordHashProvider 的哈希 SPI。而且我认为这不能通过重置密码 API 获得,但可以与更新用户 API 一起使用(我还没有测试过)。
与手动指定新密码相比,更好的安全做法是使用 PUT /admin/realms/{realm}/users/{id}/execute-actions-email
管理员调用和 "UPDATE_PASSWORD"
作为必需的操作。这会导致 Keycloak 向用户发送一封电子邮件,提供 link 以直接设置新密码。
Keycloak 'reset-password' REST API 中使用的 CredentialRepresentation 包含哈希算法、哈希密码、哈希迭代等字段。 这意味着我可以传递散列密码及其所有散列规范,而不是将纯文本密码传递给服务。这正是我想要做的,因为传递纯文本密码感觉不对。
但是,当我尝试在没有纯文本值的情况下调用该服务时,我收到 400 错误,错误消息是缺少纯文本值。有没有办法只传递散列密码?
传入明文密码(当然是通过 HTTPS)允许 keycloak 使用领域的哈希算法策略对其进行哈希处理。
如果您想传入哈希密码值、迭代和算法,那么您还需要提供实现 PasswordHashProviderFactory 和 PasswordHashProvider 的哈希 SPI。而且我认为这不能通过重置密码 API 获得,但可以与更新用户 API 一起使用(我还没有测试过)。
与手动指定新密码相比,更好的安全做法是使用 PUT /admin/realms/{realm}/users/{id}/execute-actions-email
管理员调用和 "UPDATE_PASSWORD"
作为必需的操作。这会导致 Keycloak 向用户发送一封电子邮件,提供 link 以直接设置新密码。