Keycloak 16:客户端应用用户更新邮箱与密码方案咨询
针对Keycloak 16用户信息更新需求的解决方案
一、现成的账户管理主题定制方案
Keycloak自带的账户管理控制台可直接定制,适配你的客户端登录主题,操作步骤如下:
- 复制Keycloak默认
account主题到服务器的keycloak/themes/目录,重命名为自定义主题(比如custom-account) - 修改主题内的
theme.properties,设置parent=keycloak继承基础样式,然后替换profile.ftl、password.ftl等模板文件的样式、布局,和你的客户端登录主题保持视觉一致 - 在Keycloak后台对应Realm的「主题」配置中,将「账户主题」设置为你定制的
custom-account - 客户端应用直接重定向到
{Keycloak地址}/realms/{你的Realm名}/account,用户登录后即可进入定制页面修改邮箱和密码
如果你的客户端登录主题已有成熟样式,可直接在账户主题的CSS中引用客户端主题的样式文件,减少重复开发。
二、非管理员REST API实现方式
Keycloak 12+移除旧账户API后,可通过以下方式用非管理员权限实现用户自主更新:
1. 前置权限配置
在Keycloak后台进入你的客户端:
- 开启「服务账户启用」,并在「客户端角色」中为客户端添加
manage-account和manage-account-links角色(这两个角色允许用户修改自身信息) - 根据客户端类型设置「访问类型」(
confidential或public),并开启「直接访问授权」
2. 更新邮箱
- 先调用UserInfo端点获取用户ID:
响应中的GET /realms/{你的Realm名}/protocol/openid-connect/userinfo Headers: Authorization: Bearer {用户登录后的access_token}sub字段即为用户ID - 调用管理API更新邮箱:
PUT /admin/realms/{你的Realm名}/users/{用户ID} Headers: Authorization: Bearer {用户的access_token} Body: { "email": "new-user@example.com", "emailVerified": false }
3. 更新密码
推荐两种实现方式:
方式一:调用重置密码接口
PUT /admin/realms/{你的Realm名}/users/{用户ID}/reset-password Headers: Authorization: Bearer {用户的access_token} Body: { "type": "password", "value": "new-password-123", "temporary": false }
方式二:使用新Account API(更简便)
无需用户ID,直接用用户的access_token调用:
POST /realms/{你的Realm名}/account/password Headers: Authorization: Bearer {用户的access_token} Body: { "currentPassword": "old-password", "newPassword": "new-password-123", "confirmPassword": "new-password-123" }
内容的提问来源于stack exchange,提问作者harish km
相关产品推荐
相关产品推荐

