配置身份验证

Keycloak 提供了一个灵活的身份验证框架,支持密码策略、多因素身份验证(MFA)、自定义身份验证流程,以及 WebAuthn 和 X.509 证书等高级方法。

密码策略

密码策略用于为 Realm 中的用户强制执行凭证复杂度和生命周期规则。

配置密码策略

  1. 在 Admin Console 中,转到 Authentication > Policies > Password policy 选项卡。
  2. 单击 Add policy,然后从下拉列表中选择一种策略类型。
  3. 配置策略参数并单击 Save。

可用的密码策略

策略描述示例值
Minimum Length所需的最少字符数8
Uppercase Characters所需的大写字母最少数量1
Lowercase Characters所需的小写字母最少数量1
Digits所需的数字字符最少数量1
Special Characters所需的特殊字符最少数量1
Not Username密码不能与用户名相同—
Not Email密码不能与电子邮件相同—
Password History不可重复使用的历史密码数量3
Expire Password密码必须更改前的天数90
Hashing Algorithm用于对存储密码进行哈希处理的算法pbkdf2-sha512
Hashing Iterations哈希迭代次数(越高 = 越安全,但速度越慢)210000
Maximum Length允许的最大字符数128
Regular Expression密码必须匹配的自定义正则表达式模式.*[^a-zA-Z0-9].*
Not Recently Used不可重复使用的最近使用过的密码数量3
密码策略强制执行

当用户设置或更改密码时,会强制执行密码策略。除非你添加 Update Password 必需操作以强制用户在下次登录时重置密码,否则现有用户不会受到追溯性影响。

OTP 策略

一次性密码(OTP)提供第二个身份验证因素。Keycloak 支持基于时间的 TOTP 和基于计数器的 HOTP 算法。

配置 OTP 策略

  1. 转到 Authentication > Policies > OTP policy 选项卡。
  2. 配置以下设置:
设置描述默认值
OTP Typetotp(基于时间)或 hotp(基于计数器)totp
OTP Hash Algorithm哈希算法:SHA1、SHA256、SHA512SHA1
Number of DigitsOTP 代码长度(6 或 8)6
Look Ahead Window用于检查时钟偏差(TOTP)或计数器不同步(HOTP)的间隔数1
OTP Token PeriodTOTP 代码轮换的时间间隔(秒)30
Supported Applications以逗号分隔的、向用户显示的身份验证器应用列表FreeOTP, Google Authenticator
  1. 单击 Save。

为所有用户强制启用 OTP

要将 OTP 作为所有用户的必需操作进行强制执行:

  1. 转到 Authentication > Required actions。
  2. 找到 Configure OTP 并启用 Set as default action 切换开关。
  3. 所有用户将在下次登录时收到配置 OTP 的提示。

身份验证流程

Authentication Flows 定义了用户完成身份验证所需的步骤顺序。Keycloak 包含内置流程,并支持创建自定义流程。

内置流程

流程描述
Browser标准浏览器登录(用户名/密码,如已配置则包含 OTP)
Direct GrantResource Owner Password Credentials 授权(基于 API 的登录)
Registration用户自助注册流程
Reset Credentials密码重置流程
First Broker Login用户首次通过外部 IDP 进行身份验证时执行的流程
Client Authentication使用凭证(secret、JWT 等)对客户端进行身份验证

创建自定义身份验证流程

  1. 转到 Authentication > Flows 选项卡。
  2. 单击现有流程上的菜单图标,然后选择 Duplicate。
  3. 为自定义流程输入名称(例如,Custom Browser Flow)。
  4. 通过添加、删除或重新排序身份验证步骤来修改流程:
    • 单击 Add step 以插入一个身份验证器。
    • 将每个步骤的 Requirement 设置为以下之一:
      • Required — 必须成功。
      • Alternative — 备选步骤中至少有一个必须成功。
      • Conditional — 仅在满足条件时评估。
      • Disabled — 跳过。
  5. 单击 Save。

绑定自定义流程

创建自定义流程后,将其绑定到 Realm:

  1. 转到 Authentication > Flows 选项卡。
  2. 选择你的自定义流程。
  3. 单击 Action > Bind flow。
  4. 选择绑定类型(例如,Browser flow)。
  5. 单击 Save。

WebAuthn / 无密码身份验证

Keycloak 支持用于硬件安全密钥、平台身份验证器(指纹、Face ID)以及完全无密码登录的 WebAuthn 标准。

将 WebAuthn 作为第二因素启用

  1. 转到 Authentication > Flows 选项卡。
  2. 复制 Browser 流程。
  3. 在复制的流程中,在用户名/密码步骤之后添加一个 WebAuthn Authenticator 步骤。
  4. 将 WebAuthn 步骤要求设置为 Required 或 Alternative。
  5. 将自定义流程绑定为 Browser flow。

启用无密码登录

  1. 复制 Browser 流程。
  2. 添加一个 WebAuthn Passwordless Authenticator 步骤。
  3. 将用户名表单设置为 Alternative,并将 WebAuthn Passwordless 步骤设置为 Alternative。
  4. 将自定义流程绑定为 Browser flow。
  5. 转到 Authentication > Required actions 并启用 Webauthn Register Passwordless。

配置 WebAuthn 策略

  1. 转到 Authentication > Policies > WebAuthn policy 选项卡(或 WebAuthn Passwordless policy 选项卡)。
  2. 配置:
设置描述
Relying Party Entity Name依赖方的显示名称
Signature Algorithms允许的签名算法(例如,ES256、RS256)
Relying Party ID用于凭证作用域的域名(例如,keycloak.example.com)
Attestation Conveyance Preference是否从身份验证器请求证明信息
Authenticator Attachmentplatform(内置生物识别)、cross-platform(USB 密钥)或未指定
Require Resident Key是否要求可发现的凭证(无密码登录需要)
User Verification Requirementrequired、preferred 或 discouraged
  1. 单击 Save。

X.509 客户端证书身份验证

Keycloak 可以基于 TLS 握手期间提供的 X.509 客户端证书对用户进行身份验证。

基础设施先决条件

X.509 身份验证要求配置 TLS 终止点(Keycloak Pod 或反向代理)以请求并传递客户端证书。这通常需要在 Ingress controller 或负载均衡器级别配置双向 TLS(mTLS)。具体配置取决于你的基础设施设置。

启用 X.509 身份验证

  1. 复制 Browser 流程。
  2. 添加一个 X.509/Validate Username Form 步骤。
  3. 配置 X.509 身份验证器:
设置描述
User Identity Source用于用户查找的证书字段(例如,SubjectDN、SubjectEmail、SubjectCN)
User Mapping Method如何将身份匹配到 Keycloak 用户(例如,Username or Email)
A Regular Expression用于提取证书字段部分内容的可选正则表达式
CRL Checking启用证书吊销列表检查
OCSP Checking启用在线证书状态协议检查
  1. 将自定义流程绑定为 Browser flow。

Kerberos / SPNEGO 身份验证

Keycloak 通过 SPNEGO 协议支持基于 Kerberos 的单点登录,允许具有有效 Kerberos 票据的用户透明地进行身份验证。

环境要求

Kerberos 身份验证需要可正常工作的 Kerberos 基础设施(KDC)以及正确的 DNS/SPN 配置。Keycloak 服务器必须在 Kerberos Realm 中注册为服务主体。配置细节取决于你的 Kerberos 环境,不在本指南的范围内。有关详细的 Kerberos 设置说明,请参阅上游 Keycloak 文档。

启用 Kerberos 身份验证

  1. 配置一个启用 Kerberos 集成的 User Federation 提供程序(LDAP),或配置一个独立的 Kerberos 提供程序。
  2. 提供 Kerberos Realm 名称、Server Principal 和 KeyTab 文件位置。
  3. Keycloak 会在浏览器登录期间尝试进行 SPNEGO 协商。

Step-Up 身份验证

Step-Up Authentication 允许你使用 Authentication Context Class Reference (ACR) 机制,为敏感操作要求额外的身份验证因素。

配置 ACR 到 LoA 映射

  1. 转到 Authentication > Flows 选项卡。
  2. 在你的浏览器流程中,添加基于所请求的 Assurance Level(LoA)条件的 Conditional 子流程。
  3. 转到 Realm Settings > General > ACR to LoA Mapping。
  4. 将 ACR 值映射到数值化的 LoA 等级(例如,acr-loa-1 = Level 1,acr-loa-2 = Level 2)。

随后,应用可以在授权请求中包含 acr_values 参数来请求特定的 LoA 等级,而 Keycloak 将强制执行相应的身份验证步骤。

用户会话限制

要限制每个用户的并发会话数量:

  1. 复制 Browser 流程。
  2. 添加一个 User session count limiter 步骤。
  3. 配置每个用户允许的最大会话数。
  4. 设置达到限制时的行为:拒绝新的登录或终止最旧的会话。
  5. 将自定义流程绑定为 Browser flow。