搜索

8.7. W3C Web 身份验证(WebAuthn)

download PDF

红帽构建的 Keycloak 支持 W3C Web 身份验证(WebAuthn)。红帽构建的 Keycloak 充当 WebAuthn 的 Rely ing 第三方(RP)

注意

Webauthn 的操作成功取决于用户的 WebAuthn 支持验证器、浏览器和平台。确保您的验证器、浏览器和平台支持 WebAuthn 规格。

8.7.1. 设置

对 2FA 的 WebAuthn 支持设置过程如下:

8.7.1.1. 启用 WebAuthn authenticator 注册

  1. 点菜单中的 Authentication
  2. Required Actions 选项卡。
  3. Webauthn Register 开关切换到 ON

如果您希望所有新用户注册其 WebAuthn 凭据,请将 Default Action 开关切换为 ON

8.7.2. 在浏览器流中添加 WebAuthn 身份验证

  1. 点菜单中的 Authentication
  2. 单击 浏览器 流。
  3. 从"Action list"中选择重复项,以复制内置 浏览器 流。
  4. 输入 "WebAuthn Browser" 作为副本的名称。
  5. Duplicate
  6. 点名称进入详情
  7. 单击"WebAuthn Browser Browser"的垃圾桶图标 - Conditional OTP",然后单击 Delete

如果所有用户需要 WebAuthn :

  1. 单击 WebAuthn Browser Forms+ 菜单。
  2. Add step
  3. WebAuthn Authenticator
  4. 点击 Add
  5. 选择 WebAuthn Authenticator 身份验证类型所需的,以设置其要求。

    Webauthn browser flow required

  6. 单击屏幕顶部的 Action 菜单。
  7. 从下拉列表中选择 Bind flow
  8. 从下拉列表中选择 Browser
  9. 点击 Save
注意

如果用户没有 WebAuthn 凭证,用户必须注册 WebAuthn 凭证。

如果用户只注册了 WebAuthn 凭证,则用户可以使用 WebAuthn 登录。因此 ,您可以

流程

  1. 单击 WebAuthn Browser Forms 行的 + 菜单。
  2. Add sub-flow
  3. name 字段中输入 "Conditional 2FA"。
  4. Conditional 2FA 选择 Conditional 条件,将其要求设置为条件。
  5. Conditional 2FA 行中,单击加号 + 并选择 Add condition
  6. 单击 Add condition
  7. 选择 Condition - User Configured
  8. 点击 Add
  9. 选择 Condition 所需的 - User Configured 以将其要求设置为 required。
  10. WebAuthn Authenticator 拖放到 条件 2FA
  11. WebAuthn Authenticator 选择 替代方案,将其要求设置为替代方案。

    Webauthn browser flow conditional

对于第二个因素,用户可以在使用 WebAuthn 和 OTP 之间进行选择:

流程

  1. Conditional 2FA 行中,单击加号 + 并选择 Add step
  2. 从列表中选择 OTP Form
  3. 点击 Add
  4. OTP Form 选择 Alternative 来设置它的替代要求。

    WebAuthn browser flow conditional with OTP

8.7.3. 使用 WebAuthn authenticator 进行身份验证

注册 WebAuthn authenticator 后,用户会执行以下操作:

  • 打开登录表单。用户必须使用用户名和密码进行身份验证。
  • 用户的浏览器要求用户使用其 WebAuthn 验证器进行身份验证。

8.7.4. 以管理员身份管理 WebAuthn

8.7.4.1. 管理凭证

Red Hat build of Keycloak 与用户凭证管理中的其他凭证类似 管理 WebAuthn 凭证

  • Red Hat build of Keycloak 为用户分配从 Reset Actions 列表中创建 WebAuthn 凭证所需的操作,然后选择 Webauthn Register
  • 管理员可以点删除来删除 WebAuthn 凭据。
  • 管理员可以选择 Show data…​ 来查看凭据的数据,如 AAGUID。
  • 管理员可以通过在 User Label 字段中设置值并保存数据来为凭证设置标签。

8.7.4.2. 管理策略

管理员可以将 WebAuthn 相关的操作配置为每个域的 WebAuthn Policy

流程

  1. 点菜单中的 Authentication
  2. Policy 选项卡。
  3. WebAuthn Policy 选项卡。
  4. 在策略中配置项目(请参阅以下描述)。
  5. Save

可配置的项目及其描述如下:

Configuration描述

依赖的实体名称

可读的服务器名称作为 WebAuthn Relying party。此项目是必需的,适用于 WebAuthn 验证器的注册。默认设置为 "keycloak"。如需了解更多详细信息,请参阅 WebAuthn 规格

签名算法

该算法告知 WebAuthn 验证器用于 公钥 凭据的签名算法。红帽构建的 Keycloak 使用公钥凭证来签名和验证 身份验证。如果没有算法,则默认 ES256 被调整。ES256 是一个可选配置项,适用于 WebAuthn 身份验证器注册。如需了解更多详细信息,请参阅 WebAuthn 规格

依赖第三方 ID

WebAuthn 重写的 ID,用于决定 公钥凭证 的范围。ID 必须是原始的有效域。此 ID 是应用于 WebAuthn 身份验证器的可选配置项。如果此条目为空,红帽构建的 Keycloak 会适应红帽构建的 Keycloak 基本 URL 的主机部分。如需了解更多详细信息,请参阅 WebAuthn 规格

attestation Conveyance Preference

浏览器上的 WebAuthn API 实现(WebAuthn Client)是生成 Attestation 语句的优先方法。此首选项是一个可选配置项,适用于 WebAuthn 验证器的注册。如果没有选项,其行为与选择 "none" 的行为相同。如需了解更多详细信息,请参阅 WebAuthn 规格

身份验证器附加

WebAuthn 客户端的 WebAuthn authenticator 可接受的附加模式。这个模式是一个可选配置项,适用于 WebAuthn 验证器的注册。如需了解更多详细信息,请参阅 WebAuthn 规格

需要可发现的凭证

要求 WebAuthn 验证器的选项将生成公钥凭据 作为客户端发现的凭据。这个选项适用于 WebAuthn 验证器的注册。如果留空,其行为与选择"No"的行为相同。如需了解更多详细信息,请参阅 WebAuthn 规格

用户身份验证要求

要求 WebAuthn authenticator 选项确认用户的验证。这是一个可选配置项,适用于 WebAuthn 身份验证器的注册,以及用户通过 WebAuthn authenticator 进行身份验证。如果没有选项,其行为与选择"首选"的行为相同。如需了解更多详细信息,请参阅 用于注册 WebAuthn 验证器和 WebAuthn 规范的 WebAuthn 规范,以通过 WebAuthn 验证器验证用户

Timeout(超时)

注册 WebAuthn 身份验证器并使用 WebAuthn 身份验证器验证用户的超时值(以秒为单位)。如果设置为零,则其行为取决于 WebAuthn 验证器的实现。默认值为 0。如需了解更多详细信息,请参阅 用于注册 WebAuthn 验证器和 WebAuthn 规范的 WebAuthn 规范,以通过 WebAuthn 验证器验证用户

避免相同的身份验证器注册

如果启用,红帽构建的 Keycloak 无法重新注册已注册的 WebAuthn 验证器。

可接受的 AAGUID

WebAuthn 验证器必须注册的 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,则新用户必须在首次登录后设置 Passkey。

流程

  1. 打开登录表单。
  2. Register
  3. 填写表单上的项目。
  4. Register

成功注册后,浏览器要求用户输入其 WebAuthn authenticator's 标签的文本。

8.7.6.3. 现有用户

如果根据第一个示例所示设置 WebAuthn Authenticator,那么当现有用户尝试登录时,需要他们自动注册其 WebAuthn 验证器:

流程

  1. 打开登录表单。
  2. 输入表单上的项目。
  3. Save
  4. 单击 Login

注册成功后,用户的浏览器会要求用户输入其 WebAuthn 验证器标签的文本。

8.7.7. 免密码 WebAuthn 与 Two-Factor

Red Hat build of Keycloak 使用 WebAuthn 进行双因素身份验证,但您可以使用 WebAuthn 作为第一因素身份验证。在这种情况下,具有 免密码 WebAuthn 凭证的用户可以在没有密码的情况下向红帽构建的 Keycloak 进行身份验证。红帽构建的 Keycloak 可以使用 WebAuthn 作为域上下文中的免密码和双因素身份验证机制,以及单个身份验证流。

管理员通常要求用户为 WebAuthn 免密码身份验证注册 Passkeys 满足不同的要求。例如,Passkeys 可能需要用户使用 PIN 对 Passkey 进行身份验证,或使用更强大的证书颁发机构进行 Passkey attests。

因此,红帽构建的 Keycloak 允许管理员配置单独的 WebAuthn Passwordless Policy。必需的 Webauthn Register Passwordless action of type and separate authenticator of type WebAuthn Passwordless Authenticator.

8.7.7.1. 设置

设置 WebAuthn 免密码支持,如下所示:

  1. (如果不存在),为 WebAuthn 免密码支持注册一个新的所需操作。使用 Enable WebAuthn Authenticator Registration 中所述的步骤。注册 Webauthn Register Passwordless 操作。
  2. 配置策略。您可以使用管理策略 中描述的步骤和 配置选项。WebAuthn Passwordless Policy 选项卡中执行管理控制台中的配置。通常,Passkey 的要求比双因素策略更强。例如,您可以在配置免密码策略时将 User Verification Requirement 设置为 Required
  3. 配置身份验证流。使用 WebAuthn Browser 流,如 Adding WebAuthn Authentication to a Browser Flow 所述。配置流,如下所示:

    • WebAuthn Browser Forms 子流包含 Username Form 作为第一个验证器。删除默认 Username Password Form authenticator,再添加 Username Form authenticator。此操作要求用户提供用户名作为第一步。
    • 将有一个必需的子流,它可以命名为 Passwordless Or Two-factor,例如:此子流表示用户可以使用 Passwordless WebAuthn 凭证或双因素身份验证。
    • 流包含 WebAuthn Passwordless Authenticator 作为第一个替代方案。
    • 第二个替代方案将是名为 Password and two-factor Webauthn 的子流,例如:此子流包含 Password FormWebAuthn Authenticator

流的最终配置类似如下:

免密码流

PasswordLess flow

现在,您可以将 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 登录身份验证注册的 Passkeys 满足不同的要求。无登录身份验证要求用户向 Passkey 进行身份验证(例如,使用 PIN 代码或指纹),并且与无登录凭证关联的加密密钥实际上存储在 Passkey 上。并非所有 Passkeys 都满足这一要求。如果您的设备支持 'user verification' 和 'discoverable credential',则使用您的 Passkey vendor 进行检查。请参阅支持的 Passkeys

红帽构建的 Keycloak 允许管理员以允许 无登录身份验证的方式配置 WebAuthn 无密码策略。请注意,无登录身份验证只能使用 WebAuthn Passwordless PolicyWebAuthn Passwordless 凭证进行配置。Webauthn 登录身份验证和 WebAuthn 免密码身份验证可以在同一域中配置,但将共享相同的策略 WebAuthn Passwordless Policy

8.7.8.1. 设置

流程

设置 WebAuthn 无登录支持,如下所示:

  1. (如果不存在),为 WebAuthn 免密码支持注册一个新的所需操作。使用 Enable WebAuthn Authenticator Registration 中所述的步骤。注册 Webauthn Register Passwordless 操作。
  2. 配置 WebAuthn 无密码策略。在 Admin Console, Authentication 部分中执行配置,在 Policies WebAuthn Passwordless Policy 选项卡中执行。当您为无登录场景配置策略时,您必须将 User Verification Requirement 设置为 requiredRequire Discoverable Credential to Yes。请注意,由于没有专用的无登录策略,因此无法使用用户验证=no/discoverable credential=no 和无登录场景(用户验证=yes/discoverable credential=yes)混合身份验证场景。存储容量通常对 Passkeys 非常有限,这意味着您无法将许多可发现的凭证存储在您的 Passkey 中。
  3. 配置身份验证流。创建新的身份验证流,添加 "WebAuthn Passwordless" 执行,并将执行的 Requirement 设置设置为 Required

流的最终配置类似如下:

LoginLess 流

LoginLess flow

现在,您可以将所需的操作 WebAuthn Register Passwordless 添加到一个用户(已在红帽构建的 Keycloak 中已知)以进行测试。配置有所需操作的用户必须进行身份验证(例如使用用户名/密码),然后提示您注册用于无登录身份验证的 Passkey。

8.7.8.2. 特定于供应商的标记

8.7.8.2.1. 兼容性检查列表

使用红帽构建的 Keycloak 进行无登录身份验证需要 Passkey 才能满足以下功能

  • FIDO2 合规性:不要与 FIDO/U2F 混淆
  • 用户验证: Passkey 能够验证用户(防止发现您的 Passkey 用户能够验证无登录和免密码)
  • 可发现的凭证: Passkey 能够存储与客户端应用程序关联的登录和加密密钥
8.7.8.2.2. Windows Hello

要使用基于 Windows Hello 的凭证来针对红帽构建的 Keycloak 进行身份验证,请将 WebAuthn Passwordless PolicySignature Algorithms 设置配置为包含 RS256 值。请注意,一些浏览器不允许访问私有窗口内的平台 Passkey (如 Windows Hello)。

8.7.8.2.3. 支持的 Passkeys

以下 Passkeys 已通过红帽构建的 Keycloak 成功测试进行无登录身份验证:

  • Windows Hello (Windows 10 21H1/21H2)
  • yubico Yubikey 5 NFC
  • Feitian ePass FIDO-NFC
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.