我有一个 Express.js CRUD 应用程序,并使用 Keycloak 18.0.2 进行身份管理。 Keycloak 为我的应用程序处理 Google 和 Facebook 单点登录 (SSO),并且所有身份验证均通过 Keycloak 管理。目前,用户使用 HTTP 请求中收到的访问令牌进行身份验证。
我想实现一个功能,用户可以删除自己的帐户,而无需管理权限。理想情况下,我想使用 HTTP 请求中收到的用户令牌来验证并从 Keycloak 中删除用户记录。因此,用户将向 DELETE base_url_to_my_express_js_application/users 发出请求,然后我将从我的应用程序中删除用户,然后使用我收到的作为授权标头的相同令牌调用 Keycloak 删除 API。
我尝试过以下方法但没有成功:
{
"error": "RESTEASY003210: Could not find resource for full path:http://your-keycloak-server/auth/realms/your-realm-name/account
}
{
"error": "RESTEASY003650: No resource method found for DELETE, return 405 with Allow header"
}
由于上述方法未按预期工作,我正在寻求有关如何使用 Keycloak Admin API 或任何其他替代方法来实现此功能的指导。 具体来说,我想知道:
我非常感谢有关如何在 Keycloak 18.0.2 版本中实现此功能的任何见解、示例或指导。
提前感谢您的帮助!
如果您在管理控制台中启用此功能,最终用户和应用程序可以在帐户控制台中删除其帐户。启用此功能后,您可以将该功能授予特定用户。
您可以在“所需操作”选项卡上启用此功能。
程序 单击菜单中的“身份验证”。
单击所需操作选项卡。
在删除帐户行中选择启用。
在所需操作选项卡上删除帐户 启用删除帐户操作
您可以为特定用户授予允许删除帐户的角色。
程序 单击菜单中的用户。
选择一个用户。
单击角色映射选项卡。
单击分配角色按钮。
点击账户删除-账户。
单击分配。
删除账户角色 删除账户角色
一旦您拥有删除帐户角色,您就可以删除自己的帐户。
登录帐户控制台。
在个人信息页面底部,点击删除帐户。
删除账户页面 删除账户页面
输入您的凭据并确认删除。
删除确认 删除账户确认
此操作不可逆转。您在 Keycloak 中的所有数据都将被删除。
Yohannes 的答案是正确的,但它要求您的用户使用帐户控制台,这并不总是很方便。
您需要启用“删除帐户”操作并向用户分配删除帐户角色,如上所述,但最后一步可以通过“应用程序启动操作”来实现。 只需使用附加查询参数
kc_action=delete_account
启动OAuth操作,登录后,用户将看到
删除帐户确认表单。 确认(或取消)后,您需要按照通常的 OAuth 质询处理重定向,但需要一个附加参数
kc_action_status
。