第 8 章 配置身份验证
本章涵盖了几个身份验证主题。这些主题包括:
- 强制严格的密码和一次性密码(OTP)策略。
- 管理不同的凭证类型。
- 使用 Kerberos 登录。
- 禁用并启用内置凭证类型。
8.1. 密码策略
当红帽构建的 Keycloak 创建一个域时,它不会将密码策略与域关联。您可以设置一个简单的密码,且对长度、安全性或复杂性没有限制。在生产环境中不能接受简单的密码。红帽构建的 Keycloak 通过管理控制台提供一组密码策略。
流程
- 点菜单中的 Authentication。
- 点 Policies 选项卡。
- 在 Add policy 下拉菜单中选择要添加的策略。
- 输入应用到所选策略的值。
- 点 Save。 - 密码策略   
保存策略后,红帽构建的 Keycloak 会为新用户强制执行策略。
新策略对现有用户无效。因此,请确保从创建域开始设置密码策略,或者向现有用户添加"Update password",或使用"Expire password"来确保用户在下一个"N"天内更新其密码,这将实际调整为新的密码策略。
8.1.1. 密码策略类型
8.1.1.1. hashAlgorithm
密码不存储在明文中。在存储或验证之前,红帽使用标准哈希算法构建 Keycloak 哈希密码。PBKDF2 是唯一可用的内置和默认算法。有关如何添加您自己的哈希算法,请参阅 服务器开发人员指南。
如果您更改了哈希算法,则存储中的密码哈希不会更改,直到用户登录为止。
8.1.1.2. 哈希迭代
指定红帽在存储或验证前的 Keycloak 哈希密码构建的次数。默认值为 27,500。
红帽构建的 Keycloak 哈希密码,以确保可访问密码数据库的主机操作者无法通过反向工程读取密码。
高散列迭代值可能会影响性能,因为它需要更高的 CPU 电源。
8.1.1.3. 数字
密码字符串中所需的数字数字数。
8.1.1.4. 小写字符
密码字符串所需的小写字母数。
8.1.1.5. 大写字符
密码字符串中所需的大写字母数。
8.1.1.6. 特殊字符
密码字符串所需的特殊字符数。
8.1.1.7. Not username
密码不能与用户名相同。
8.1.1.8. Not email
密码不能与用户的电子邮件地址相同。
8.1.1.9. 正则表达式
密码必须与一个或多个定义的正则表达式模式匹配。
8.1.1.10. 密码过期
密码有效的天数。当天数已过期后,用户必须更改其密码。
8.1.1.11. 最近没有使用
用户不能使用密码。红帽构建的 Keycloak 存储了已用密码的历史记录。存储的旧密码数量可在红帽构建的 Keycloak 中进行配置。
8.1.1.12. 密码黑名单
密码不能位于黑名单文件中。
- 黑名单文件是 UTF-8 纯文本文件,其中带有 Unix 行结尾。每行代表列入黑名单的密码。
- 红帽构建的 Keycloak 以区分大小写的方式比较密码。黑名单中的所有密码都必须是小写。
- 
								blacklist 文件的名称必须是黑名单文件的名称,例如 100k_passwords.txt。
- 默认将文件解析为 - ${kc.home.dir}/data/password-blacklists/。使用以下方法自定义这个路径:- 
										keycloak.password.blacklists.path系统属性。
- 
										passwordBlacklist策略 SPI 配置的blacklistsPath属性。要使用 CLI 配置黑名单文件夹,请使用--spi-password-policy-password-blacklist-blacklists-path=/path/to/blacklists\":\"。
 
- 
										
有关 False Positives 的备注
当前实施使用 BloomFilter 进行快速且内存有效的包含检查,如给定密码是否包含在黑名单中,且可能是假的正状态。
- 
								默认情况下,使用 0.01%的假概率。
- 
								要更改 CLI 配置的错误正概率,请使用 --spi-password-policy-password-blacklist-false-positive-probability=0.00001