gpt4 book ai didi

key 斗篷 : implement "reset password" (as admin) flow same as "forgot password" (as user)

转载 作者:行者123 更新时间:2023-12-05 03:43:18 37 4
gpt4 key购买 nike

我想在 Keycloak 中实现这个身份验证流程:

  1. 用户只需输入他的电子邮件即可创建一个帐户
  2. 用户已登录并可以访问我的服务2'。同时,向他发送一封电子邮件,允许他“完成”他的帐户
  3. 用户离开他的 session -> 要重新使用我的服务,他必须点击收到的电子邮件
  4. 通过点击收到的电子邮件,用户定义他的第一个密码
  5. 然后用户会自动登录(无需通过登录页面)。

此流程的目标是最简单,吸引不习惯网络应用程序的用户。

我会做的实现:

  • 创建一个没有密码请求的帐户:我通过禁用密码验证配置文件验证规则自定义Keycloak注册流程
  • 以编程方式,在我的网络应用程序中,在用户第一次连接时,通过 REST Admin API,我触发电子邮件操作 UPDATE_PASSWORD

我得到了一些有用的东西,但是:

一个。通过电子邮件收到的链接重定向到确认执行操作的中间页面(“执行以下操作”)-(类似于 Keycloak Implement Reset password flow same as forgot password flow )

B.然后用户将被重定向到登录页面,而不是直接连接到应用程序。

作为普通用户,当我触发重置密码请求(通过“忘记密码”功能)时,过程就是我想要的:通过单击电子邮件链接,我直接进入允许我输入的页面并确认新密码,然后我就通过了身份验证。

我的问题:您是否找到了实现这种“简化”流程的方法?

我的 key 斗篷版本:11.0.2

谢谢!

最佳答案

我可以删除“info.ftl”页面显示,自定义“ExecuteActionsActionTokenHandler”,如下所述:

action-token-spi

你必须创建一个文件:

src/main/resources/META-INF/services/org.keycloak.authentication.actiontoken.ActionTokenHandlerFactory

包含您要改用的类的名称:

com.example.ExecuteActionTokenHandlerFactory

然后使用以下代码创建该类 com.example.ExecuteActionTokenHandlerFactory :

public class ExecuteActionTokenHandlerFactory extends ExecuteActionsActionTokenHandler {


@Override
public Response handleToken(ExecuteActionsActionToken token, ActionTokenContext<ExecuteActionsActionToken> tokenContext) {
AuthenticationSessionModel authSession = tokenContext.getAuthenticationSession();
String redirectUri = RedirectUtils.verifyRedirectUri(tokenContext.getUriInfo(), token.getRedirectUri(),
tokenContext.getRealm(), authSession.getClient());

if (redirectUri != null) {
authSession.setAuthNote(AuthenticationManager.SET_REDIRECT_URI_AFTER_REQUIRED_ACTIONS, "true");

authSession.setRedirectUri(redirectUri);
authSession.setClientNote(OIDCLoginProtocol.REDIRECT_URI_PARAM, redirectUri);
}

token.getRequiredActions().stream().forEach(authSession::addRequiredAction);

UserModel user = tokenContext.getAuthenticationSession().getAuthenticatedUser();
// verify user email as we know it is valid as this entry point would never have gotten here.
user.setEmailVerified(true);

String nextAction = AuthenticationManager.nextRequiredAction(tokenContext.getSession(), authSession, tokenContext.getClientConnection(), tokenContext.getRequest(), tokenContext.getUriInfo(), tokenContext.getEvent());
return AuthenticationManager.redirectToRequiredActions(tokenContext.getSession(), tokenContext.getRealm(), authSession, tokenContext.getUriInfo(), nextAction);
}

}

其实和上层类的实现是一样的,只是去掉了下面的部分:

        if (tokenContext.isAuthenticationSessionFresh()) {
...
}

这意味着如果用户没有 session (当用户重置密码时发生),他将被重定向到该“info.ftl”页面。

关于 key 斗篷 : implement "reset password" (as admin) flow same as "forgot password" (as user),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66861665/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com