在keycloak上是否有用于更改用户密码的API调用?

时间:2015-11-25 07:19:59

标签: json keycloak

我正在尝试实现自己的表单来更改用户的密码。我试图在Keycloak中找到用于更改用户密码的API,但我无法在文档中找到任何内容。 这样做有API吗?

5 个答案:

答案 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

  • {id}是keycloak中的用户ID(不是登录名)

这是样本体。

{ "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 请求以对用户执行操作。您需要按照 hereenter image description here

中的说明获取管理员访问令牌

答案 4 :(得分:-4)

不,OAuth和OpenID Connect协议没有定义此类功能,而Keycloak也没有此功能。但Keycloak通过网址提供了某种“我的帐户页面”,例如http://localhost:8080/auth/realms/your-realm/account/ - 替换了your-realm部分网址,只是将用户重定向到该网址。 Keucloak My User Account Service: change password

在文档中称为User Account Service

此外,如果您使用自动发现,则可以通过网址account-service从JSON阅读http://localhost:8080/auth/realms/your-realm来获取网址