8.7. W3C Web 身份验证(WebAuthn)
红帽构建的 Keycloak 支持 W3C Web 身份验证(WebAuthn)。红帽构建的 Keycloak 充当 WebAuthn 的 Rely ing 第三方(RP)。
Webauthn 操作成功取决于用户的 WebAuthn 支持验证器、浏览器和平台。确保您的验证器、浏览器和平台支持 WebAuthn 规格。
8.7.1. 设置 复制链接链接已复制到粘贴板!
WebAuthn 对 2FA 支持的设置过程如下:
8.7.1.1. 启用 WebAuthn 验证器注册 复制链接链接已复制到粘贴板!
- 点菜单中的 Authentication。
- 点 Required Actions 选项卡。
- 将 Webauthn Register 开关切换为 ON。
如果您希望所有新用户都需要注册其 WebAuthn 凭据,请将 Default Action 开关切换到 ON。
8.7.2. 在浏览器流中添加 WebAuthn 身份验证 复制链接链接已复制到粘贴板!
- 点菜单中的 Authentication。
- 单击 浏览器 流。
- 从 "Action 列表中选择 Duplicate,以制作内置 浏览器 流的副本。
- 输入"WebAuthn Browser"作为副本的名称。
- 点 Duplicate。
- 点名称进入详情
- 单击"WebAuthn Browser - Conditional OTP"的回收站图标,然后单击 Delete。
如果需要所有用户的 WebAuthn:
- 单击 WebAuthn Browser Forms 的 + 菜单。
- 点 Add step。
- 单击 WebAuthn Authenticator。
- 点 Add。
为 WebAuthn Authenticator 身份验证类型选择 Required,以将其要求设置为 required。
- 单击屏幕顶部的 Action 菜单。
- 从下拉列表中选择 Bind flow。
- 从下拉列表中选择 Browser。
- 点 Save。
如果用户没有 WebAuthn 凭据,用户必须注册 WebAuthn 凭据。
如果他们只注册了 WebAuthn 凭据,用户可以使用 WebAuthn 登录。因此 ,您可以 :
流程
- 单击 WebAuthn Browser Forms 行的 + 菜单。
- 单击 Add sub-flow。
- 在 name 字段中输入 "Conditional 2FA"。
- 为 Conditional 2FA 选择 Conditional,将其要求设置为 conditions。
- 在 Conditional 2FA 行中,单击加号 + 并选择 Add condition。
- 点 Add condition。
- 选择 Condition - User Configured。
- 点 Add。
- 为 Condition 选择 Required - User Configured 以将其要求设置为 required。
- 将 WebAuthn Authenticator 拖放到 Conditional 2FA 流
选择 WebAuthn Authenticator 的替代方案,将其要求设置为 alternatives。
用户可以选择使用 WebAuthn 和 OTP 作为第二个因素:
流程
- 在 Conditional 2FA 行中,单击加号 + 并选择 Add step。
- 从列表中选择 OTP Form。
- 点 Add。
选择 OTP Form 的替代方案,将其要求设置为替代方案。
8.7.3. 使用 WebAuthn authenticator 进行身份验证 复制链接链接已复制到粘贴板!
注册 WebAuthn authenticator 后,用户执行以下操作:
- 打开登录表单。用户必须使用用户名和密码进行身份验证。
- 用户的浏览器要求用户使用 WebAuthn authenticator 进行身份验证。
8.7.4. 以管理员身份管理 WebAuthn 复制链接链接已复制到粘贴板!
8.7.4.1. 管理凭证 复制链接链接已复制到粘贴板!
Red Hat build of Keycloak 与用户凭证管理中的其他凭证类似 管理 WebAuthn 凭证 :
- Red Hat build of Keycloak 为用户分配从 Reset Actions 列表中创建 WebAuthn 凭证所需的操作,然后选择 Webauthn Register。
- 管理员可以单击 Delete 来删除 WebAuthn 凭据。
- 管理员可以选择 Show data… 来查看凭据的数据,如 AAGUID。
- 管理员可以通过在 User Label 字段中设置值并保存数据来为凭证设置标签。
8.7.4.2. 管理策略 复制链接链接已复制到粘贴板!
管理员可以将 WebAuthn 相关操作配置为每个域的 WebAuthn Policy。
流程
- 点菜单中的 Authentication。
- 点 Policy 选项卡。
- 点 WebAuthn Policy 选项卡。
- 在策略中配置项目(请参阅以下描述)。
- 点 Save。
可配置的项目及其描述如下:
| Configuration | 描述 |
|---|---|
| 依赖部分实体名称 | 可读的服务器名称作为 WebAuthn Relying Party。此项目是必须的,适用于注册 WebAuthn authenticator。默认设置为 "keycloak"。如需了解更多详细信息,请参阅 WebAuthn 规格。 |
| 签名算法 | 该算法告知 WebAuthn 验证器用于 公钥 凭据的签名算法。红帽构建的 Keycloak 使用公钥凭证来签名和验证 身份验证。如果不存在算法,则会调整默认的 ES256。ES256 是应用于 WebAuthn authenticators 的可选配置项。如需了解更多详细信息,请参阅 WebAuthn 规格。 |
| 依赖部分 ID | WebAuthn Relying Party 的 ID,它决定了 公钥凭据 的范围。ID 必须是原始卷的有效域。此 ID 是应用于注册 WebAuthn authenticators 的可选配置项。如果此条目为空,红帽构建的 Keycloak 会适应红帽构建的 Keycloak 基本 URL 的主机部分。如需了解更多详细信息,请参阅 WebAuthn 规格。 |
| 测试约定 | 浏览器上的 WebAuthn API 实施(WebAuthn Client)是生成 Attestation 语句的首选方法。这个首选项是应用于 WebAuthn authenticator 的可选配置项。如果没有选项,其行为与选择"none"的行为相同。如需了解更多详细信息,请参阅 WebAuthn 规格。 |
| 验证器附加 | WebAuthn 客户端 WebAuthn authenticator 的可接受的附加模式。这个模式是应用于 WebAuthn authenticator 的可选配置项。如需了解更多详细信息,请参阅 WebAuthn 规格。 |
| 需要重新密钥 | 需要 WebAuthn authenticator 的选项将公钥凭据生成 为客户端端公钥凭据。此选项适用于 WebAuthn authenticator 的注册。如果留空,其行为与选择"否"的行为相同。如需了解更多详细信息,请参阅 WebAuthn 规格。 |
| 用户验证要求 | 需要 WebAuthn authenticator 的选项确认用户的验证。这是一个可选配置项,适用于 WebAuthn authenticator 的注册,以及 WebAuthn 身份验证器验证用户的身份验证。如果没有选项,其行为与选择"首选"的行为相同。如需了解更多详细信息,请参阅 WebAuthn 规格 以注册 WebAuthn 验证器 和 WebAuthn 规范,以通过 WebAuthn 验证器验证用户。 |
| Timeout(超时) | 注册 WebAuthn 验证器并使用 WebAuthn authenticator 验证用户的超时值(以秒为单位)。如果设置为零,则其行为取决于 WebAuthn 验证器的实施。默认值为 0。如需了解更多详细信息,请参阅 WebAuthn 规格 以注册 WebAuthn 验证器 和 WebAuthn 规范,以通过 WebAuthn 验证器验证用户。 |
| 避免出现同样的注册 | 如果启用,红帽构建的 Keycloak 无法重新注册已注册的 WebAuthn 验证器。 |
| 可接受的 AAGUID | WebAuthn authenticator 必须注册的 AAGUID 的白名单列表。 |
8.7.5. attestation 语句验证 复制链接链接已复制到粘贴板!
在注册 WebAuthn authenticator 时,红帽构建的 Keycloak 会验证由 WebAuthn authenticator 生成的 attestation 语句的可信度。Red Hat build of Keycloak 需要信任 anchor 的证书导入到 信任存储中。
要省略此验证,请禁用此信任存储,或将 WebAuthn 策略的配置项 "Attestation Conveyance Preference" 设置为 "none"。
8.7.6. 以用户身份管理 WebAuthn 凭证 复制链接链接已复制到粘贴板!
8.7.6.1. 注册 WebAuthn authenticator 复制链接链接已复制到粘贴板!
注册 WebAuthn authenticator 的适当方法取决于用户在红帽构建的 Keycloak 上已注册了帐户。
8.7.6.2. 新用户 复制链接链接已复制到粘贴板!
如果 WebAuthn Register required 操作在域中是 Default Action,则新用户必须在首次登录后设置 WebAuthn 安全密钥。
流程
- 打开登录表单。
- 点 Register。
- 填写表单上的项目。
- 点 Register。
成功注册后,浏览器会要求用户输入其 WebAuthn 验证器标签的文本。
8.7.6.3. 现有用户 复制链接链接已复制到粘贴板!
如果 WebAuthn Authenticator 根据要求设置,如第一个示例所示,则当现有用户尝试登录时,需要自动注册其 WebAuthn authenticator:
流程
- 打开登录表单。
- 在表单中输入项目。
- 点 Save。
- 单击 Login。
成功注册后,用户的浏览器要求用户输入其 WebAuthn authenticator 标签的文本。
8.7.7. 免密码 WebAuthn 和 two-Factor 复制链接链接已复制到粘贴板!
Red Hat build of Keycloak 使用 WebAuthn 进行双因素身份验证,但您可以使用 WebAuthn 作为第一因素身份验证。在这种情况下,具有 免密码 WebAuthn 凭证的用户可以在没有密码的情况下向红帽构建的 Keycloak 进行身份验证。红帽构建的 Keycloak 可以使用 WebAuthn 作为域上下文中的免密码和双因素身份验证机制,以及单个身份验证流。
管理员通常需要用户为 WebAuthn 免密码身份验证注册的安全密钥满足不同的要求。例如,安全密钥可能需要用户使用 PIN 验证安全密钥,或者带有更强大的证书颁发机构的tests 的安全密钥。
因此,红帽构建的 Keycloak 允许管理员配置单独的 WebAuthn Passwordless Policy。有所需的 Webauthn Register Passwordless 操作,以及类型为 WebAuthn Passwordless Authenticator 的独立验证器。
8.7.7.1. 设置 复制链接链接已复制到粘贴板!
设置 WebAuthn 免密码支持,如下所示:
-
(如果尚不存在)为 WebAuthn 免密码支持注册一个新的所需操作。使用 启用 WebAuthn Authenticator Registration 中所述的步骤。注册
Webauthn Register Passwordless操作。 - 配置策略。您可以使用 管理策略 中描述的步骤和 配置选项。在 WebAuthn Passwordless Policy 选项卡的 Admin Console 中执行配置。通常,安全密钥的要求将比双因素策略更强。例如,您可以在配置免密码策略时将用户 验证要求 设置为 必需。
配置身份验证流。使用 向 浏览器流 添加 WebAuthn Authentication 中所述的 WebAuthn 浏览器流。配置流,如下所示:
- WebAuthn Browser Forms 子流包含 Username Form 作为第一个验证器。删除默认用户名 密码表单 验证器,并添加 用户名表单 验证器。此操作要求用户在第一步中提供用户名。
- 将有一个所需的子流,它可以被命名为 Passwordless Or Two-factor。此子流表示用户可以使用 Passwordless WebAuthn 凭证或双因素身份验证进行身份验证。
- 流包含 WebAuthn Passwordless Authenticator 作为第一个替代方案。
- 第二个替代方案是名为 Password and Two-factor Webauthn 的子流,例如:此子流包含 Password Form 和 WebAuthn Authenticator。
流的最终配置类似如下:
免密码流
现在,您可以将 WebAuthn Register Passwordless 作为用户(已已知的 Keycloak )添加必要操作来测试这一点。在第一次身份验证过程中,用户必须使用密码和第二个因素 WebAuthn 凭据。如果用户使用 WebAuthn Passwordless 凭证,则用户不需要提供密码和第二个因素 WebAuthn 凭据。
8.7.8. LoginLess WebAuthn 复制链接链接已复制到粘贴板!
Red Hat build of Keycloak 使用 WebAuthn 进行双因素身份验证,但您可以使用 WebAuthn 作为第一因素身份验证。在这种情况下,具有 免密码 WebAuthn 凭证的用户可以在不提交登录或密码的情况下向红帽构建的 Keycloak 进行身份验证。Red Hat build of Keycloak 可以使用 WebAuthn 作为域上下文中的无登录/密码以及双因素身份验证机制。
管理员通常需要用户为 WebAuthn 登录身份验证注册的安全密钥满足不同的要求。无登录身份验证要求用户对安全密钥进行身份验证(例如,使用 PIN 代码或指纹),并且与无登录凭证关联的加密密钥存储在安全密钥中。并非所有安全密钥都满足这一要求。如果您的设备支持"用户验证"和"公司密钥",请检查您的安全密钥供应商。请参阅支持的安全密钥。
红帽构建的 Keycloak 允许管理员以允许 无登录身份验证的方式配置 WebAuthn 无密码策略。请注意,无登录身份验证只能使用 WebAuthn Passwordless Policy 和 WebAuthn Passwordless 凭证进行配置。Webauthn loginless authentication 和 WebAuthn 免密码身份验证可以在同一域中配置,但将共享相同的策略 WebAuthn Passwordless Policy。
8.7.8.1. 设置 复制链接链接已复制到粘贴板!
流程
设置 WebAuthn Loginless 支持,如下所示:
-
(如果尚不存在)为 WebAuthn 免密码支持注册一个新的所需操作。使用 启用 WebAuthn Authenticator Registration 中所述的步骤。注册
Webauthn Register Passwordless操作。 -
配置
WebAuthn 无密码策略。在 Admin Console,Authentication部分中,在PoliciesWebAuthn Passwordless Policy选项卡中执行配置。当您为无登录场景配置策略时,您必须将 用户验证 要求设置为 required,并将 Require Resident Key 设置为 Yes。请注意,由于没有专用的无登录策略,因此无法将身份验证场景与用户 validation=no/POL key=no 和 loginless 场景(用户验证=yes/phone key=yes)混合在一起。在安全密钥上,存储容量通常非常有限,这意味着您无法将许多常量密钥存储在安全密钥上。 - 配置身份验证流。创建新的身份验证流,添加"WebAuthn Passwordless"执行,并将执行的要求设置设置为 Required
流的最终配置类似如下:
LoginLess 流
现在,您可以将所需的操作 WebAuthn Register Passwordless 添加到一个用户(已在红帽构建的 Keycloak 中已知)以进行测试。配置所需操作的用户必须进行身份验证(例如,使用用户名/密码),然后提示您注册要用于登录身份验证的安全密钥。
8.7.8.2. 特定于供应商的重新标记 复制链接链接已复制到粘贴板!
8.7.8.2.1. 兼容性检查列表 复制链接链接已复制到粘贴板!
使用 Red Hat build of Keycloak 进行无登录身份验证需要安全密钥来满足以下功能
- FIDO2 合规性:不与 FIDO/U2F 混淆
- 用户身份验证:安全密钥验证用户的能力(确保您的安全密钥可以无需登录和免密码)
- Cent key:安全密钥能够存储与客户端应用程序关联的登录和加密密钥
8.7.8.2.2. Windows Hello 复制链接链接已复制到粘贴板!
要使用基于 Windows Hello 的凭证来针对红帽构建的 Keycloak 进行身份验证,请将 WebAuthn Passwordless Policy 的 Signature Algorithms 设置配置为包含 RS256 值。请注意,一些浏览器不允许访问私有窗口中的平台安全密钥(如 Windows Hello)。
8.7.8.2.3. 支持的安全密钥 复制链接链接已复制到粘贴板!
以下安全密钥已通过红帽构建的 Keycloak 成功测试进行无登录身份验证:
- Windows Hello (Windows 10 21H1/21H2)
- yubico Yubikey 5 NFC
- Feitian ePass FIDO-NFC