在自定义 Keycloak SPI Authenticator 中处理用户的取消

Posted

技术标签:

【中文标题】在自定义 Keycloak SPI Authenticator 中处理用户的取消【英文标题】:Handle user's cancel in custom Keycloak SPI Authenticator 【发布时间】:2019-04-09 12:11:00 【问题描述】:

我需要。 我实现了它,它工作正常。我只需要取消登录流程并在用户点击取消时从乞讨开始

    @Override
    public void action(AuthenticationFlowContext context) 
        logger.debug("action called ... context = " + context);
        String cancel = context.getHttpRequest().getDecodedFormParameters().getFirst("cancel");
        if (cancel != null) 
            context.cancelLogin();
            context.resetFlow();
            return;
        
// OK handling...

在我的情况下,我得到了登录页面,但 URL 错误:

http://localhost:8080/auth/realms/realm1/login-actions/authenticate?execution=bb1fb7c3-0b59-4a07-b997-b619c6f9ea2a&client_id=realm1-client&tab_id=YJxYk7osJaU

当我第一次进入安全页面时,而不是这样的 URL:

http://localhost:8080/auth/realms/realm1/protocol/openid-connect/auth?response_type=code&client_id=realm1-client&redirect_uri=http%3A%2F%2Flocalhost%3A8081%2Fsso%2Flogin&state=2cc038b9-2c69-4648-ac39-e5864bc05ee9&login=true&scope=openid

【问题讨论】:

【参考方案1】:

啊,我只需要留下一行(或者在返回之前把它放在最后一行):

context.cancelLogin();

在我的自定义应用程序中,我需要使用 KK 将重定向我的参数来处理端点

/sso/login?error=access_denied&state=923e5b18-1d8e-4c96-9fed-c1dd122065bb

【讨论】:

我正在尝试实现类似的功能,其中我的自定义身份验证 SPI 将执行 context.cancelLogin() 并将用户重定向回调用应用程序,我的问题是调用应用程序应该如何推断响应并了解现在需要将用户重定向到启动身份验证流程的初始登录页面。 以防万一,根据文档, context.cancelLogin() 只能在基于浏览器的流程中执行。

以上是关于在自定义 Keycloak SPI Authenticator 中处理用户的取消的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak - 自定义 SPI 未出现在列表中

带有外部 Jar 的 Keycloak 自定义 SPI 部署

具有授权的 Keycloak 自定义 SPI REST 端点

Keycloak 用户存储 SPI 实现

keycloak~自定义rest接口

使用 Docker 时未加载 Keycloak SPI 提供程序和层