为了让用户收到“重置密码”电子邮件,我们调用 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
您调用的 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,但只允许登录用户重置自己的密码。