9.10. 第一个登录流
当用户通过身份代理登录时,红帽构建的 Keycloak 导入,以及域本地数据库中用户的链接方面。当红帽构建的 Keycloak 通过外部身份提供程序成功验证用户时,可能会出现两种情况:
- 红帽构建的 Keycloak 已导入,并将用户帐户与经过身份验证的身份提供程序帐户相关联。在这种情况下,红帽构建的 Keycloak 以现有用户身份进行身份验证,并将重新重定向到应用程序。
- 红帽构建的 Keycloak 中没有此用户的帐户。通常,您将新帐户注册并导入到红帽构建的 Keycloak 数据库,但可能存在具有相同电子邮件地址的现有 Keycloak 帐户构建。将现有本地帐户自动链接到外部身份提供程序是潜在的安全漏洞。您无法始终信任来自外部身份提供程序的信息。
在处理其中的一些情况时,不同的机构有不同的要求。使用红帽构建的 Keycloak,您可以使用 IDP 设置中的 First Login Flow
选项,选择首次从外部 IDP 登录的用户 的工作流。默认情况下,第一个 登录流
选项指向 第一个代理登录流
,但您可以将流或不同的流用于不同的身份提供程序。
流位于 身份验证选项卡下的管理控制台中。当您选择 First Broker Login
流时,您会看到默认使用的验证器。您可以重新配置现有的流。例如,您可以禁用一些验证器,将它们标记为 必需
,或者配置一些验证器。
9.10.1. 默认第一次登录流验证器 复制链接链接已复制到粘贴板!
- 查看配置文件
- 此验证器显示配置集信息页面,因此用户可以查看红帽从身份提供程序中检索 Keycloak 的配置集。
-
您可以在 Actions 菜单中设置
Update Profile On First Login
选项。 - 在 ON 时,用户会显示配置集页面,请求额外信息来联合用户的身份。
- 缺少 时,如果身份提供程序不提供强制信息(如电子邮件、名字或姓氏)时,用户会看到配置文件页面。
-
当 OFF 时,配置集页面不会显示,除非用户在
Confirm Link Existing Account
authenticator 显示的页面中点Review profile info
链接的后续阶段。
- 如果唯一,创建用户
此验证器检查是否已有一个已存在的 Keycloak 帐户,其电子邮件或用户名(如身份提供程序中的帐户一样)。如果没有,则验证器只创建一个新的本地红帽构建 Keycloak 帐户,并将其与身份提供程序链接,整个流程已完成。否则,它会进入下一个
Handle Existing Account
子流。如果始终要确保没有重复的帐户,您可以将此验证器标记为REQUIRED
。在这种情况下,如果已存在红帽构建 Keycloak 帐户,用户会看到错误页面,并且用户需要通过帐户管理链接身份提供程序帐户。- 此验证器验证是否已有一个红帽构建的 Keycloak 帐户,其电子邮件或用户名与身份提供程序的帐户相同。
- 如果帐户不存在,则验证器会创建一个本地的红帽构建 Keycloak 帐户,将这个帐户与身份提供程序连接,并终止流。
-
如果存在帐户,则验证器将实施下一个
Handle Existing Account
子流。 -
要确保没有重复的帐户,您可以将此验证器标记为
REQUIRED
。如果红帽构建的 Keycloak 帐户存在,用户会看到错误页面,用户必须通过帐户管理链接其身份提供程序帐户。
- 确认链接现有帐户
-
在信息页面中,用户会看到一个具有相同电子邮件的 Keycloak 帐户的红帽构建。用户可以再次查看其配置文件,并使用不同的电子邮件或用户名。流重启并返回到
Review Profile
验证器。 - 另外,用户可以确认他们希望将其身份提供程序帐户与其现有红帽构建的 Keycloak 帐户相关联。
- 如果您不希望用户看到此确认页面,请直接通过电子邮件验证或重新身份验证链接身份提供程序帐户,请禁用此验证器。
-
在信息页面中,用户会看到一个具有相同电子邮件的 Keycloak 帐户的红帽构建。用户可以再次查看其配置文件,并使用不同的电子邮件或用户名。流重启并返回到
- 通过电子邮件验证现有帐户
-
默认情况下,此
验证器
是 ALTERNATIVE。如果域配置了 SMTP 设置,红帽构建的 Keycloak 会使用此验证器。 - 验证器向用户发送电子邮件,以确认他们希望将身份提供程序与其红帽构建的 Keycloak 帐户相关联。
- 如果您不想通过电子邮件确认链接,但希望用户使用其密码重新进行身份验证,请禁用此验证器。
-
默认情况下,此
- 通过重新身份验证验证现有帐户
- 如果电子邮件验证器不可用,请使用此验证器。例如,您尚未为您的域配置 SMTP。此验证器显示一个登录屏幕,供用户验证将其红帽构建的 Keycloak 帐户与身份提供程序相关联。
- 用户也可以重新验证已链接到其红帽构建的 Keycloak 帐户的另一个身份提供程序。
- 您可以强制用户使用 OTP。否则,它是可选的,如果您为用户帐户设置了 OTP,则使用它。
9.10.2. 自动链接现有第一次登录流 复制链接链接已复制到粘贴板!
AutoLink 验证器在通用环境中是危险的,用户可以使用任意用户名或电子邮件地址注册自己。除非您仔细策展用户注册并分配用户名和电子邮件地址,否则不要使用此验证器。
要配置在不提示的情况下自动链接用户的第一个登录流,请使用以下两个验证器创建新流:
- 如果唯一,创建用户
- 此验证器可确保红帽构建 Keycloak 处理唯一用户。将验证器要求设置为 Alternative。
- 自动设置现有用户
- 此验证器将现有用户设置为身份验证上下文,无需验证。将验证器要求设置为"Alternative"。
此设置是可用的最简单的设置,但可以使用其他验证器。例如:如果您希望最终用户确认其配置集信息,您可以在流的开头添加 Review Profile authenticator。* 您可以在此流中添加验证机制,强制用户验证其凭证。添加验证机制需要复杂的流程。例如,您可以在 "Alternative" 子流中将 "Automatically Set Existing User" 和 "Password Form" 设置为 "Required"。
9.10.3. 禁用自动用户创建 复制链接链接已复制到粘贴板!
Default first login 流查找与外部身份匹配的 Keycloak 帐户的红帽构建,并提供链接它们。如果没有匹配的红帽构建的 Keycloak 帐户,则流会自动创建一个。
对于某些设置,这个默认行为可能不适合。例如,如果您使用只读 LDAP 用户存储,其中所有用户都预先创建。在这种情况下,您必须关闭自动创建用户。
禁用用户创建:
流程
- 点菜单中的 Authentication。
- 从列表中选择 First Broker Login。
- 设置 创建用户(如果唯一 )到 DISABLED。
- 将 Confirm Link Existing Account 设置为 DISABLED。
此配置还意味着红帽构建的 Keycloak 本身将无法确定哪个内部帐户会与外部身份对应。因此,Verify Existing Account By Re-authentication
authenticator 将要求用户提供用户名和密码。
通过身份提供程序启用或禁用用户创建在域用户 注册交换机上 完全独立。您可以由身份提供程序启用 user-creation,并在域登录设置中禁用了用户自助注册,反之亦然。
9.10.4. 检测现有用户第一次登录流 复制链接链接已复制到粘贴板!
要配置第一个登录流,请执行以下操作:
- 只有已在此域中注册的用户可以登录,
- 在不提示的情况下,会自动链接用户。
使用以下两个验证器创建新流:
- 检测现有代理用户
-
此验证器可确保处理唯一的用户。将验证器要求设置为
REQUIRED
。 - 自动设置现有用户
-
自动将现有用户设置为身份验证上下文,而无需验证。将验证器要求设置为
REQUIRED
。
您必须将 身份提供程序配置的第一个登录流
设置为该流。如果要使用身份提供程序属性更新用户配置集(Last Name, First Name…),您可以将 Sync Mode
设置为 force
。
如果要将身份委派给其他身份提供程序(如 GitHub、Facebook …),但您想要管理可以登录的用户,则可以使用这个流。
使用这个配置,红帽构建的 Keycloak 无法决定哪个内部帐户与外部身份对应。Verify Existing Account By Re-authentication authenticator 向提供程序询问用户名和密码。