如何让 Keycloak 验证用户同意?

Posted

技术标签:

【中文标题】如何让 Keycloak 验证用户同意?【英文标题】:How to make Keycloak validate user consent? 【发布时间】:2020-04-26 22:15:18 【问题描述】:

在我们的 NodeJS/React 应用程序中,我们使用 Keycloak 进行授权。我们需要在注册时实施同意。我们将所有这些布局调整到我们的设计系统https://github.com/keycloak/keycloak/tree/3.4.3.Final/themes/src/main/resources/theme/base/login。 注册表有布局。我们将复选框 <input type=checkbox name="user.attributes.registration_consent1" /> 添加到 appropriate layout。 如果用户注册并选中复选框,我可以确认相关信息存储在 Keycloak>Users>SomeUser>Edit>Attributes

但是用户仍然可以在不选中复选框的情况下注册。如果他不检查同意,如何防止用户注册?我不想使用 javascript

Terms and Conditions 方法不可接受,因为糟糕的用户体验和转换速度变慢。

【问题讨论】:

【参考方案1】:

您需要执行必要的操作。在 admin 下,转到 Authentication -> Required Actions 选项卡。你可以在那里找到条款和条件。

您可能需要编辑条款和条件模板以匹配您的主题并添加您需要用户阅读的文本。您通常可以在 /login/terms.ftl 下找到它

结果:如果用户拒绝条款和条件,将不会注册。

【讨论】:

我想this 模板应该显示为注册的第二步。从用户体验的角度来看,这是不可接受的,我们不希望这样。另一个缺陷是糟糕的营销流程。用户的注册应该尽可能快速和最简单地转换它。 稍作调整,应该有办法将其集成到注册页面中 您能详细说明一下吗?当您说“一些调整”时,您的具体想法是什么? 不确定,需要研究一下。另一种方法是使用 html 表单验证,在您的情况下 。这将显示一个弹出窗口,要求用户选中复选框。这是一个例子:the-art-of-web.com/html/html5-checkbox-required【参考方案2】:

将表单字段添加到模板后,您需要验证用户输入。验证还意味着检查用户是否填写了必填字段,并根据该字段的值覆盖/添加数据。

例如用户检查了“条款和条件”,但您需要存储那些被接受的时间戳,可能还有被接受的“条款和条件”的版本。

依赖客户端验证(HTML 或 JavaScript)并不是最佳解决方案。

在这种特殊情况下,您需要告诉 Keycloak 如何验证该新字段的值。

这可以通过使用 Keycloak 的服务提供者接口 (SPI) 来完成。在这种情况下,身份验证 SPI 负责处理注册表单数据。

以下是文档中该特定部分的链接: https://www.keycloak.org/docs/latest/server_development/#modifying-extending-the-registration-form

【讨论】:

以上是关于如何让 Keycloak 验证用户同意?的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak - 授权验证失败。原因:无效令牌(错误的 ISS)

如何使用创建用户或其他 API 在 keycloak 中添加用户同意?

如何让我的 Spring Boot 应用程序使用给定的用户名和密码登录到 keycloak?

使用 Keycloak 进行微服务身份验证

如何在 keycloak 的 ftl 文件中包含 React js 文件?

如何检查来自另一个 keycloak 实例 B 的身份验证 keycloak 实例 A 用户?