发送密码忘记邮件
Posted
技术标签:
【中文标题】发送密码忘记邮件【英文标题】:Send password forgotten mail 【发布时间】:2020-09-23 11:24:55 【问题描述】:我在 Keycloak 中有两个类似的用例。
密码重置
首先,我想让用户能够重置他们的密码。用户已经有一个应用程序正在使用,所以将它集成到那里会很好。我在其中创建了一个小的角模块,并尝试通过 Keycloak 密码忘记表单提供的相同机制触发忘记密码的邮件。但我不知道他们是如何创建此操作链接的:
https://example.com/keycloak/auth/realms/my-realm/login-actions/reset-credentials?session_code=dpmvJISKKf-SSZbC8_FkrBZEuYhwcV24ui-dc27DKvI&execution=98bd5b5d-054e-4c44-ad07-50b668fb149a&client_id=account&tab_id=Lr7iH6BRehM
执行似乎总是一样的,但我不知道从哪里得到它。
当 Keycloak 和应用程序在 sam 域上运行时,我当前的解决方案是从 keycloak 请求原始站点,提取链接,并在用户输入用户名后向该 URL 发出发布请求。但这有点脏:)
有没有“正确”的方法来做到这一点?
密码重置的补充
我们有不同的领域来处理 LDAP 中具有 SASL 属性和存储在 MSAD 中的真实密码的用户帐户。我们的前端会确定哪种类型的用户正在请求密码重置并委托给适当的领域。
初始密码
第二个问题是关于在管理区域创建用户并发送初始邮件以设置密码。我可以使用上面的方法来触发邮件。但是邮件说密码忘记了,而他们确实是第一次设置密码,这并不好。 我尝试在用户 REST 表示中设置所需的操作,但这似乎不会触发任何邮件。
是否需要采取预期的方式来做到这一点?我错过了一个功能吗?
密码重置的补充 我们有不同的领域来处理 LDAP 中具有 SASL 属性和存储在 MSAD 中的真实密码的用户帐户。我们的前端会确定哪种类型的用户正在请求密码重置并委托给适当的领域。
【问题讨论】:
【参考方案1】:keycloakhere提供了相当多的admin-api端点
满足您的要求;
-
密码重置 - 您应该能够通过利用 API“PUT /realm/users/id/execute-actions-email”来执行此操作。 *** 中有很多例子,包括this
初始密码 - 对于创建用户,您应该能够在调用“POST /realm/users”时使用类似的方法,因为您可以在 UserRepresentation 对象中传递“必需的操作”。此外,您可以将此 API 与之前的 API 结合使用以满足您的需求。这里还有其他 API 可供您使用,但请记住,keycloak 也为用户提供了registration page。
请务必检查“PUT /realm/users/id/reset-password”。
查看此链接以获取所需操作的explanation。
请注意,为了调用 keycloak admin-api,您应该创建一个具有足够权限来调用 admin-api 的客户端。对此的配置将取决于您计划使用的授权机制 - 但要了解它的要点 - 创建一个客户端并检查客户端页面上可用的替代方案 - 附上屏幕截图供您参考;
祝你好运!
【讨论】:
1) 用户应自行重置密码,因此管理 API 在这里不起作用。 2) 所需的操作似乎是错误的方式。从您引用的链接中:“..用户必须在允许登录之前完成。用户必须在执行所需操作之前提供其凭据。”。他无法提供他的凭据,因为他还没有这些凭据。我只想让管理员创建一个用户,然后向用户发送一封电子邮件,以便他可以设置他的凭据 事实证明,虽然在我的配置中所需的操作不适用于初始密码,但 execute-actions-email 确实有效。所以我目前的问题是让用户自行重置密码。以上是关于发送密码忘记邮件的主要内容,如果未能解决你的问题,请参考以下文章