我正在尝试实现自己的表单来更改用户的密码。我试图在Keycloak中找到用于更改用户密码的API,但我无法在文档中找到任何内容。 这样做有API吗?
答案 0 :(得分:24)
Keycloak最近引入了此功能,但是它仍处于预览状态,因此没有记录。
要使其正常工作,您需要通过使用参数account_api
启动密钥斗篷来激活-Dkeycloak.profile.feature.account_api=enabled
功能,如下所示:
bin/standalone.sh -Dkeycloak.profile.feature.account_api=enabled
(来源:https://www.keycloak.org/docs/latest/server_installation/index.html#profiles)
此后,您可以使用POST /auth/realms/your-realm/account/credentials/password
并提供http标头Accept: application/json
。该标头将使密钥斗篷使用RestAPI-Service,该API接受并返回JSON(而不是默认的基于表单的表单,后者仅接受x-www-form-urlencoded
并返回HTML。)
以 Request-Body 的身份提供这样的JSON:
{
"currentPassword": "oldPassword",
"newPassword": "newPassword",
"confirmation": "newPassword"
}
有关curl的完整示例如下:
curl --request POST 'https://path-to-your-host.com/auth/realms/your-realm/account/credentials/password' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"currentPassword": "oldPassword",
"newPassword": "newPassword",
"confirmation": "newPassword"
}'
请注意-如上所述,此功能仍处于预览状态,将来可能会更改。因此请谨慎使用!
答案 1 :(得分:14)
您可以使用PUT /auth/admin/realms/{realm}/users/{id}/reset-password
这是样本体。
{ "type": "password", "temporary": false, "value": "my-new-password" }
答案 2 :(得分:10)
不是手动指定新密码,而是使用
更好的安全措施 PUT /auth/admin/realms/{realm}/users/{id}/execute-actions-email
使用"UPDATE_PASSWORD"
进行管理员调用作为必需操作。这会导致Keycloak向用户发送一封电子邮件,为用户提供设置新密码的魔力链接。
注意:{id}是keycloak中的用户ID(不是登录名)
答案 3 :(得分:2)
正如 Keycloak Admin REST API 建议的那样,您可以向 PUT
发送 keycloakEndpoint/auth/{realm}/users/{id}/execute-actions-email
请求以对用户执行操作。您需要按照 here
答案 4 :(得分:-4)
不,OAuth和OpenID Connect协议没有定义此类功能,而Keycloak也没有此功能。但Keycloak通过网址提供了某种“我的帐户页面”,例如http://localhost:8080/auth/realms/your-realm/account/
- 替换了your-realm
部分网址,只是将用户重定向到该网址。
在文档中称为User Account Service
此外,如果您使用自动发现,则可以通过网址account-service
从JSON阅读http://localhost:8080/auth/realms/your-realm
来获取网址