配置身份验证
Keycloak 提供了一个灵活的身份验证框架,支持密码策略、多因素身份验证(MFA)、自定义身份验证流程,以及 WebAuthn 和 X.509 证书等高级方法。
目录
密码策略配置密码策略可用的密码策略OTP 策略配置 OTP 策略为所有用户强制启用 OTP身份验证流程内置流程创建自定义身份验证流程绑定自定义流程WebAuthn / 无密码身份验证将 WebAuthn 作为第二因素启用启用无密码登录配置 WebAuthn 策略X.509 客户端证书身份验证启用 X.509 身份验证Kerberos / SPNEGO 身份验证启用 Kerberos 身份验证Step-Up 身份验证配置 ACR 到 LoA 映射用户会话限制密码策略
密码策略用于为 Realm 中的用户强制执行凭证复杂度和生命周期规则。
配置密码策略
- 在 Admin Console 中,转到 Authentication > Policies > Password policy 选项卡。
- 单击 Add policy,然后从下拉列表中选择一种策略类型。
- 配置策略参数并单击 Save。
可用的密码策略
当用户设置或更改密码时,会强制执行密码策略。除非你添加 Update Password 必需操作以强制用户在下次登录时重置密码,否则现有用户不会受到追溯性影响。
OTP 策略
一次性密码(OTP)提供第二个身份验证因素。Keycloak 支持基于时间的 TOTP 和基于计数器的 HOTP 算法。
配置 OTP 策略
- 转到 Authentication > Policies > OTP policy 选项卡。
- 配置以下设置:
- 单击 Save。
为所有用户强制启用 OTP
要将 OTP 作为所有用户的必需操作进行强制执行:
- 转到 Authentication > Required actions。
- 找到 Configure OTP 并启用 Set as default action 切换开关。
- 所有用户将在下次登录时收到配置 OTP 的提示。
身份验证流程
Authentication Flows 定义了用户完成身份验证所需的步骤顺序。Keycloak 包含内置流程,并支持创建自定义流程。
内置流程
创建自定义身份验证流程
- 转到 Authentication > Flows 选项卡。
- 单击现有流程上的菜单图标,然后选择 Duplicate。
- 为自定义流程输入名称(例如,
Custom Browser Flow)。 - 通过添加、删除或重新排序身份验证步骤来修改流程:
- 单击 Add step 以插入一个身份验证器。
- 将每个步骤的 Requirement 设置为以下之一:
Required— 必须成功。Alternative— 备选步骤中至少有一个必须成功。Conditional— 仅在满足条件时评估。Disabled— 跳过。
- 单击 Save。
绑定自定义流程
创建自定义流程后,将其绑定到 Realm:
- 转到 Authentication > Flows 选项卡。
- 选择你的自定义流程。
- 单击 Action > Bind flow。
- 选择绑定类型(例如,Browser flow)。
- 单击 Save。
WebAuthn / 无密码身份验证
Keycloak 支持用于硬件安全密钥、平台身份验证器(指纹、Face ID)以及完全无密码登录的 WebAuthn 标准。
将 WebAuthn 作为第二因素启用
- 转到 Authentication > Flows 选项卡。
- 复制 Browser 流程。
- 在复制的流程中,在用户名/密码步骤之后添加一个 WebAuthn Authenticator 步骤。
- 将 WebAuthn 步骤要求设置为
Required或Alternative。 - 将自定义流程绑定为 Browser flow。
启用无密码登录
- 复制 Browser 流程。
- 添加一个 WebAuthn Passwordless Authenticator 步骤。
- 将用户名表单设置为
Alternative,并将 WebAuthn Passwordless 步骤设置为Alternative。 - 将自定义流程绑定为 Browser flow。
- 转到 Authentication > Required actions 并启用 Webauthn Register Passwordless。
配置 WebAuthn 策略
- 转到 Authentication > Policies > WebAuthn policy 选项卡(或 WebAuthn Passwordless policy 选项卡)。
- 配置:
- 单击 Save。
X.509 客户端证书身份验证
Keycloak 可以基于 TLS 握手期间提供的 X.509 客户端证书对用户进行身份验证。
X.509 身份验证要求配置 TLS 终止点(Keycloak Pod 或反向代理)以请求并传递客户端证书。这通常需要在 Ingress controller 或负载均衡器级别配置双向 TLS(mTLS)。具体配置取决于你的基础设施设置。
启用 X.509 身份验证
- 复制 Browser 流程。
- 添加一个 X.509/Validate Username Form 步骤。
- 配置 X.509 身份验证器:
- 将自定义流程绑定为 Browser flow。
Kerberos / SPNEGO 身份验证
Keycloak 通过 SPNEGO 协议支持基于 Kerberos 的单点登录,允许具有有效 Kerberos 票据的用户透明地进行身份验证。
Kerberos 身份验证需要可正常工作的 Kerberos 基础设施(KDC)以及正确的 DNS/SPN 配置。Keycloak 服务器必须在 Kerberos Realm 中注册为服务主体。配置细节取决于你的 Kerberos 环境,不在本指南的范围内。有关详细的 Kerberos 设置说明,请参阅上游 Keycloak 文档。
启用 Kerberos 身份验证
- 配置一个启用 Kerberos 集成的 User Federation 提供程序(LDAP),或配置一个独立的 Kerberos 提供程序。
- 提供 Kerberos Realm 名称、Server Principal 和 KeyTab 文件位置。
- Keycloak 会在浏览器登录期间尝试进行 SPNEGO 协商。
Step-Up 身份验证
Step-Up Authentication 允许你使用 Authentication Context Class Reference (ACR) 机制,为敏感操作要求额外的身份验证因素。
配置 ACR 到 LoA 映射
- 转到 Authentication > Flows 选项卡。
- 在你的浏览器流程中,添加基于所请求的 Assurance Level(LoA)条件的 Conditional 子流程。
- 转到 Realm Settings > General > ACR to LoA Mapping。
- 将 ACR 值映射到数值化的 LoA 等级(例如,
acr-loa-1= Level 1,acr-loa-2= Level 2)。
随后,应用可以在授权请求中包含 acr_values 参数来请求特定的 LoA 等级,而 Keycloak 将强制执行相应的身份验证步骤。
用户会话限制
要限制每个用户的并发会话数量:
- 复制 Browser 流程。
- 添加一个 User session count limiter 步骤。
- 配置每个用户允许的最大会话数。
- 设置达到限制时的行为:拒绝新的登录或终止最旧的会话。
- 将自定义流程绑定为 Browser flow。