KeyCloak 用户角色:仅为自己的帐户重置密码端点

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

为了让用户收到“重置密码”电子邮件,我们调用 KeyCloak API,如下所示:

PUT <keycloak>/admin/realms/<realm>/users/<userId>/reset-password-email?client_id=<clientId>&redirect_uri=http://localhost:3000/

如果该用户具有用户角色

[real-management] manage-users
[real-management] realm-admin
,则此操作有效。

但是,通过此用户角色,用户不仅可以为自己的帐户调用端点,还可以为其他用户调用端点,这不是我们想要的。

问:我们应该赋予什么用户角色,以允许用户仅为自己的帐户调用上述端点?

我认为这将是一个

account
用户角色。但即使具有以下所有帐户用户角色的用户,调用上述端点仍会返回 403 错误。

使用

authorization_code
授权类型登录后,我将在授权标头中发送访问令牌。我是否可能调用了错误的 API 来仅更改用户帐户?

钥匙斗篷21.0.1

oauth-2.0 keycloak user-management keycloak-rest-api
1个回答
0
投票

您调用的 API 端点

/admin/realms/{realm}/users/{id}/reset-password-email
Keycloak 的管理 API 的一部分,主要用于管理目的。

通常,这些管理操作应该由高权限用户而不是个人帐户持有者执行。这就是为什么您所描述的角色(

[real-management] manage-users
[real-management] realm-admin
)允许访问管理多个用户,并且将它们限制为仅一个特定的用户帐户是不可行的。

所以我认为不存在这样的角色,让用户只能重置自己的帐户。
另外,我在

21.0.1 Keycloak 的 Admin API
中没有看到 /reset-password-email,只有
/resetpassword

对于用户重置自己的密码,通常不建议使用Admin API;相反,Keycloak 通过其自己的用户界面提供开箱即用的帐户管理功能。用户可以导航到帐户管理控制台并从那里触发密码重置。
例如,“是否有用于更改 Keycloak 上的用户密码的 API 调用?

中对此进行了说明。

它是一个用户表单,然后使用正确的角色执行 API 调用。

或者,您可以利用 Keycloak 的内置忘记密码功能。用户可以从登录页面启动此操作,他们将收到一封包含重置说明的电子邮件。


但是,如果您正在开发自定义应用程序,并且希望将此功能集成到您自己的用户界面中,则可能会设置一个单独的后端服务来公开密码重置端点。然后,该服务将代表用户调用 Keycloak 管理 API,但只允许登录用户重置自己的密码。

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