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