问题描述
我想在Keycloak中实现此身份验证流程:
I would like to implement this authentication flow in Keycloak:
- 用户仅通过输入电子邮件来创建帐户
- 用户已登录并可以访问我的服务2'.同时,向他发送了一封电子邮件,使他可以完成"邮件.他的帐户
- 用户离开他的会话->要重新使用我的服务,他必须单击收到的电子邮件
- 通过单击收到的电子邮件,用户定义他的第一个密码
- 然后用户自动登录(无需通过登录页面).
此流程的目标是最简单,吸引不习惯使用Web应用程序的用户.
The objective of this flow is to be the simplest, to hook users who are not used to webapps.
我会做的实现:
- 创建没有密码请求的帐户:我通过禁用
密码验证
和Profile Validation
规则 来定制Keycloak - 以编程方式,在我的Web应用程序中,通过REST Admin API在用户的首次连接时,我触发了电子邮件操作
UPDATE_PASSWORD
Registration
流程- Create an account without password request: I customize the Keycloak
Registration
flow by disabling thePassword Validation
andProfile Validation
rules - Programmatically, in my webapp, at the first connection of a user, via the REST Admin API, I trigger the email action
UPDATE_PASSWORD
我得到了一些有用的东西,但是:
I get something that works, but:
A.电子邮件接收的链接重定向到一个中间页面,以确认操作的执行(执行以下操作")-(类似于 Keycloak实施与忘记密码流程相同的重置密码流程)
A. The link received by email redirects to an intermediary page confirming the execution of actions ("Perform the following action (s)") - (similar to Keycloak Implement Reset password flow same as forgot password flow)
B.然后,用户将被重定向到登录页面,而不是直接连接到应用程序.
B. The user is then redirected to a login page, and not directly connected to the application.
当我以普通用户身份(通过忘记密码"功能)触发重置密码请求时,该过程就是我想要的过程:通过单击电子邮件链接,我直接转到允许我输入的页面并确认新密码,然后我就通过了身份验证.
When, as a normal user, I trigger a reset password request (through 'forget password' feature), the process is the one I want: by clicking on the email link, I go directly to the page allowing me to enter and confirm a new password, then I'm authenticated.
我的问题:您看到一种实现这种简化"流程的方法吗?
我的密钥斗篷版本:11.0.2
My keycloak version : 11.0.2
谢谢!
推荐答案
作为问题A的解决方法,我自定义了 info.ftl
模板页面.我在链接上的 click
上添加了一个难看的内联脚本,自动重定向到更新密码页面.
As a workaround for problem A, I customize info.ftl
template page. I add an ugly inline script to click
on the link, redirecting automatically to the update password page.
<#import "template.ftl" as layout>
(...)
<#elseif actionUri?has_content>
<p><a id="yolo" href="${actionUri}">${kcSanitize(msg("proceedWithAction"))?no_esc}</a></p>
<script>document.getElementById('yolo').click()</script>
(...)
在找到更干净的解决方案之前,它会继续工作.
It'll do the job until I found a cleaner solution.
目前,B问题仍然存在.
At the moment, B problem remains.
这篇关于Keycloak:实现“重置密码"(以管理员身份)的流程与“忘记密码"的流程相同(以用户身份)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!