与残疾用户确认电子邮件后的Keycloak自动登录

时间:2017-07-28 21:58:08

标签: email login keycloak confirmation

我们正在使用keycloak(KC)和注册流程的自定义提供程序。在注册流程结束时,在确认电子邮件发送给用户之前(作为默认的KC功能),我们禁用用户,因为它适合我们的用例。

当用户点击电子邮件确认时,确认邮件并且用户自动登录,尽管他/她在此时被禁用。按预期工作后登录(如果禁用用户,禁止登录,否则成功)。

在查看Keycloak源代码时,似乎会在确认邮件中发送会话ID,如果会话已存在于KC中,则会自动重复使用,用户就像登录一样继续进行。如果会话不存在,则“确认电子邮件” “显示页面,用户未登录(按预期方式)。

为了确认我的KC理论没有在现有会话中检查用户状态(启用/禁用),我已经禁用了当前在应用程序中处于活动状态的用户。用户未注销或任何类似的东西。

我的结论是,当用户完成注册时,会话存在,然后在点击确认链接时会自动“劫持”该会话。中间没有任何地方,KC会检查用户是否实际启用了。与在用户登录并正在浏览受保护的应用程序时禁用用户相同。

有没有人对此问题有任何解决方法?我的下一步是以某种方式在注册结束时以编程方式使会话无效,因此用户在点击确认邮件时将不会有任何内容。我不知道如何在KC jira上跟踪这个错误,因为它们似乎没有任何公共错误跟踪器。无论如何,这不是这个问题的重点 - 我的问题是,是否有其他人已经遇到过这个问题,如果有的话,它是如何解决的?

1 个答案:

答案 0 :(得分:0)

我已经解决了编写自定义Required Action的类似问题。电子邮件验证后会触发所需的操作,因此您可以检查用户是否已启用(Secret question required action example)。

在我的情况下,如果用户验证不正常,我会重定向到错误页面:

Response challenge =
context.form().setError(MessagesIDs.NOT_VALIDATED_ID).createErrorPage(Status.UNAUTHORIZED);
context.challenge(challenge);
return;