如何让用户使用API删除自己的Keycloak帐户?

问题描述 投票:0回答:2

我有一个 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。

我尝试过以下方法但没有成功:

  1. 在互联网上,我得到了在 Keycloak 的“帐户”选项卡中启用“自助帐户管理”的建议:我发现 Keycloak 18.0.2 中没有“帐户”选项卡,并且我找不到启用自助服务的选项服务帐户管理。
  2. https://my-keycloak/auth/realms/my-realm/account 发出 DELETE 请求: 此端点返回状态 404。
  {
    "error": "RESTEASY003210: Could not find resource for full path:http://your-keycloak-server/auth/realms/your-realm-name/account
  }
  1. https://my-keycloak/realms/my-realm/account 发出 DELETE 请求:此端点返回状态 405。
  {
    "error": "RESTEASY003650: No resource method found for DELETE, return 405 with Allow header"
  }

由于上述方法未按预期工作,我正在寻求有关如何使用 Keycloak Admin API 或任何其他替代方法来实现此功能的指导。 具体来说,我想知道:

  • 如何让用户使用自己的访问令牌删除自己的 Keycloak 帐户?
  • 是否有特定的 Keycloak Admin API 端点允许用户删除自己的帐户?如果是这样,我该如何访问它?
  • 如果上述方法不可行,我可以使用哪些替代方法来安全地实现帐户删除功能?

我非常感谢有关如何在 Keycloak 18.0.2 版本中实现此功能的任何见解、示例或指导。

提前感谢您的帮助!

keycloak keycloak-rest-api keycloak-authorization-services keycloak-admin-cli
2个回答
1
投票

允许用户删除帐户

如果您在管理控制台中启用此功能,最终用户和应用程序可以在帐户控制台中删除其帐户。启用此功能后,您可以将该功能授予特定用户。

启用删除帐户功能

您可以在“所需操作”选项卡上启用此功能。

程序 单击菜单中的“身份验证”。

单击所需操作选项卡。

在删除帐户行中选择启用。

在所需操作选项卡上删除帐户 启用删除帐户操作

为用户授予删除帐户角色

您可以为特定用户授予允许删除帐户的角色。

程序 单击菜单中的用户。

选择一个用户。

单击角色映射选项卡。

单击分配角色按钮。

点击账户删除-账户。

单击分配。

删除账户角色 删除账户角色

删除您的帐户

一旦您拥有删除帐户角色,您就可以删除自己的帐户。

登录帐户控制台。

在个人信息页面底部,点击删除帐户。

删除账户页面 删除账户页面

输入您的凭据并确认删除。

删除确认 删除账户确认

此操作不可逆转。您在 Keycloak 中的所有数据都将被删除。


0
投票

Yohannes 的答案是正确的,但它要求您的用户使用帐户控制台,这并不总是很方便。

您需要启用“删除帐户”操作并向用户分配删除帐户角色,如上所述,但最后一步可以通过“应用程序启动操作”来实现。 只需使用附加查询参数

kc_action=delete_account

启动OAuth操作,登录后,用户将看到

删除帐户确认表单
确认(或取消)后,您需要按照通常的 OAuth 质询处理重定向,但需要一个附加参数

kc_action_status

    

© www.soinside.com 2019 - 2024. All rights reserved.