Keycloak用户自注册

2023/05/12

1. 概述

我们可以使用Keycloak作为第三方授权服务器来管理我们的Web或移动应用程序的用户。

虽然管理员可以添加用户,但Keycloak也可以让用户自行注册。此外,除了名字、姓氏和电子邮件等默认属性外,我们还可以根据应用程序的需要添加额外的用户属性。

在本教程中,我们将了解如何在Keycloak上启用自助注册并在用户注册页面上添加自定义字段

我们在自定义登录页面的基础上进行构建,因此在初始设置时先完成它会很有帮助。

2. 独立服务器

首先,我们将看到独立Keycloak服务器的用户自助注册。

2.1 启用用户注册

最初,我们需要启用Keycloak以允许用户注册。为此,我们首先需要通过从Keycloak发行版的bin文件夹中运行此命令来启动服务器:

./standalone.sh -Djboss.socket.binding.port-offset=100

然后我们需要转到管理控制台并输入initial1/zaq1!QAZ凭据。

接下来,在Realm Settings页面的Login选项卡中,我们将切换User registration按钮:

就这样!我们只需单击“Save”即可启用自助注册。

所以现在我们将在登录页面上获得一个名为Register的链接:

再次回想一下,该页面看起来与Keycloak的默认登录页面不同,因为我们正在扩展我们之前所做的自定义

注册链接将我们带到注册页面:

我们可以看到,默认页面包含了Keycloak用户的基本属性

在下一节中,我们将看到如何为我们的选择添加额外的属性。

2.2 添加自定义用户属性

继续我们的自定义主题,让我们将现有模板base/login/register.ftl复制到我们的custom/login文件夹中。

我们现在将尝试为Date of birth添加一个新的字段dob,为此,我们需要修改上面的register.ftl并添加以下内容:

<div class="form-group">
    <div class="${properties.kcLabelWrapperClass!}">
        <label for="user.attributes.dob" class="${properties.kcLabelClass!}">
            Date of birth</label>
    </div>

    <div class="${properties.kcInputWrapperClass!}">
        <input type="date" class="${properties.kcInputClass!}"
               id="user.attributes.dob" name="user.attributes.dob"
               value="${(register.formData['user.attributes.dob']!'')}"/>
    </div>
</div>

现在,当我们在此页面上注册新用户时,我们也可以输入其出生日期

为了进行验证,让我们打开管理控制台上的Users页面并查找Jane:

接下来,让我们转到Jane的属性并查看DOB:

很明显,这里显示的出生日期与我们在自助注册表上输入的日期相同。

3. 嵌入式服务器

现在让我们看看如何为嵌入在Spring Boot应用程序中的Keycloak服务器添加自定义属性以进行自注册。

与独立服务器的第一步相同,我们需要在开始时启用用户注册。

我们可以通过在我们的Realm定义文件tuyucheng-realm.json中将registrationAllowed设置为true来做到这一点:

"registrationAllowed" : true,

之后,我们需要将出生日期添加到register.ftl中,方法与之前完全相同

接下来,让我们将此文件复制到我们的src/main/resources/themes/custom/login目录。

现在启动服务器,我们的登录页面带有注册链接,这是带有我们的自定义字段Date of birth的自助注册页面:

请务必记住,通过嵌入式服务器的自注册页面添加的用户是暂时的

由于我们没有将此用户添加到预配置文件中,因此它在服务器重启时将不可用。然而,这在开发阶段会派上用场,此时我们只检查设计和功能。

为了进行测试,在重新启动服务器之前,我们可以验证用户是否从管理控制台添加了DOB作为自定义属性,我们也可以尝试使用新用户的凭据登录。

4. 总结

在本教程中,我们学习了如何在Keycloak中启用用户自助注册,并看到了如何在注册为新用户时添加自定义属性。

与往常一样,源代码可在GitHub上获得,对于独立服务器,它在教程GitHub上,对于嵌入式实例,它在OAuth GitHub上

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章