用于 Windows 上无密码身份验证的 WebAuthn API

密码会使客户容易受到恶意用户的数据泄露和安全攻击。

Microsoft一直是无密码身份验证的支持者,并在 Windows 10 (版本 1903) 中引入了 W3C/Fast IDentity Online 2 (FIDO2) Win32 WebAuthn 平台 API。

Windows 11 版本 22H2 开始,WebAuthn API 支持 ECC 算法。

这意味着什么?

通过使用 WebAuthn API,开发人员合作伙伴和开发人员社区可以使用 Windows HelloFIDO2 安全密钥 在 Windows 设备上为其应用程序实现无密码多重身份验证。

这些应用或网站的用户可以使用任何支持 WebAuthn API 的浏览器进行无密码身份验证。 无论用户使用哪种浏览器,用户都将在 Windows 上获得熟悉且一致的体验。

开发人员应使用 WebAuthn API 以一致的方式为用户支持 FIDO2 身份验证密钥。 此外,开发人员可以使用根据 FIDO2 规范提供的所有传输 (USB、NFC 和 BLE) ,同时避免交互和管理开销。

注意

使用这些 API 时,Windows 10 浏览器或应用程序无法直接访问 FIDO2 传输,以便与 FIDO 相关的消息传递。

大局

客户端到验证器协议 2 (CTAP2) 和 WebAuthn 定义了一个抽象层,用于为经过强身份验证的凭据创建生态系统。 在此生态系统中,在给定客户端设备上运行的任何可互操作客户端 ((例如本机应用或浏览器) )都使用标准化方法与任何可互操作的验证器进行交互。 可互操作的验证器包括内置于客户端设备的验证器 (平台验证器) ,以及通过使用 USB、BLE 或 NFC 连接 (漫游验证器) 连接到客户端设备的验证器。

当用户发出指示同意操作的特定用户手势时,身份验证过程将启动。 在客户端的请求下,验证器会安全地创建强加密密钥并将其存储在本地。

创建这些特定于客户端的密钥后,客户端可以请求注册和身份验证证明。 私钥使用的签名类型反映了所做的用户手势。

下图显示了 CTAP 和 WebAuthn 的交互方式。 浅蓝色虚线箭头表示依赖于平台 API 的特定实现的交互。

此图显示了 WebAuthn API 如何与信赖方和 CTAPI2 API 交互。

参与无密码身份验证的组件的关系

组合的 WebAuthn/CTAP2 舞蹈包括以下角色:

  • 客户端设备客户端设备是托管给定强身份验证的硬件。 笔记本电脑和手机是客户端设备的示例。

  • 信赖方和客户端信赖方 是使用强凭据的 Web 或本机应用程序。 信赖方在客户端设备上运行。

    • 作为信赖方,本机应用程序还可以充当 WebAuthn 客户端进行直接 WebAuthn 调用。

    • 作为信赖方,Web 应用程序无法直接与 WebAuthn API 交互。 信赖方必须通过浏览器代理交易。

    注意

    上图未描述单 Sign-On (SSO) 身份验证。 请注意,不要将 FIDO 信赖方与联合信赖方混淆。

  • WebAuthn APIWebAuthn API 使客户端能够向验证器发出请求。 客户端可以请求验证器创建密钥、提供有关密钥的断言、报告功能、管理 PIN 等。

  • CTAP2 平台/主机平台 (在 CTAP2 规范) 中也称为主机,是与验证器协商的客户端设备的一部分。 平台负责安全地报告请求的来源,并 (CBOR) API 调用 CTAP2 简明二进制对象表示形式。 如果平台不识别 CTAP2,则客户端本身会承担更多的负担。 在这种情况下,上图中显示的组件和交互可能有所不同。

  • 平台验证器平台验证器通常驻留在客户端设备上。 平台验证器的示例包括使用内置笔记本电脑指纹读取器的指纹识别技术和使用内置智能手机摄像头的面部识别技术。 跨平台传输协议(如 USB、NFC 或 BLE)无法访问平台验证器。

  • 漫游验证器漫游验证器可以连接到多个客户端设备。 客户端设备必须使用支持的传输协议来协商交互。 漫游验证器的示例包括 USB 安全密钥、支持 BLE 的智能手机应用程序和启用 NFC 的邻近感应卡。 漫游验证器可以支持 CTAP1、CTAP2 或这两种协议。

许多信赖方和客户端可以在单个客户端设备上与多个验证器交互。 用户可以安装多个支持 WebAuthn 的浏览器,并且可能同时有权访问内置指纹读取器、插入式安全密钥和启用 BLE 的移动应用程序。

互操作性

在 WebAuthn 和 CTAP2 之前,有 U2F 和 CTAP1。 U2F 是 FIDO 联盟通用的第二因素规范。 有许多验证器会说 CTAP1 并管理 U2F 凭据。 WebAuthn 旨在与 CTAP1 验证器互操作。 如果信赖方不需要仅限 FIDO2 的功能,则使用 WebAuthn 的信赖方仍然可以使用 U2F 凭据。

FIDO2 验证器已实现,WebAuthn 信赖方可能需要以下可选功能:

以下选项将来可能很有用,但尚未在野外观察到:

  • 事务审批
  • 用户验证索引 (服务器可以确定本地存储的生物识别数据是否随时间而更改)
  • 用户验证方法 (验证器返回确切的方法)
  • 生物识别性能限制 (信赖方可以指定可接受的错误接受率和错误拒绝率)

Microsoft实现

MICROSOFT FIDO2 实施已经取得了多年。 软件和服务作为符合标准的实体独立实现。 从 Windows 10 版本 1809 (2018 年 10 月版本) 版起,所有Microsoft组件都使用最新的 WebAuthn 候选版本。 这是一个稳定的版本,预计在规范最终批准之前不会进行规范性更改。 由于Microsoft是世界上第一个部署 FIDO2 的组件之一,因此某些常用非Microsoft组件组合尚无法互操作。

下面是Microsoft位的大致布局:

此图显示了 WebAuthn API 如何与Microsoft信赖方和 CTAPI2 API 交互。

Microsoft WebAuthn 和 CATP2 API 的实现

  • WebAuthn 信赖方:Microsoft帐户。 如果你不熟悉 Microsoft 帐户,它是 Xbox、Outlook 和许多其他网站的登录服务。 登录体验使用客户端 JavaScript 触发 Microsoft Edge 与 WebAuthn API 通信。 Microsoft帐户要求验证器具有以下特征:

    • 密钥存储在验证器本地,而不是存储在远程服务器上
    • 使用 HMAC) 启用脱机方案 (工作
    • 用户可以将多个用户帐户的密钥放在同一个验证器上
    • 如有必要,验证器可以使用客户端 PIN 解锁 TPM

    重要提示

    由于 Microsoft 帐户需要 FIDO2 CTAP2 验证器特有的功能和扩展,因此它不接受 CTAP1 (U2F) 凭据。

  • WebAuthn 客户端:Microsoft Edge。 Microsoft Edge 可以处理本文介绍的 WebAuthn 和 CTAP2 功能的用户界面。 它还支持 AppID 扩展。 Microsoft Edge 可以与 CTAP1 和 CTAP2 验证器交互。 此交互范围意味着它可以创建和使用 U2F 和 FIDO2 凭据。 但是,Microsoft Edge 不会使用 U2F 协议。 因此,信赖方必须仅使用 WebAuthn 规范。 Android 上的 Microsoft Edge 不支持 WebAuthn。

    注意

    有关 Microsoft Edge 对 WebAuthn 和 CTAP 的支持的权威信息,请参阅 旧版 Microsoft Edge 开发人员文档

  • 平台:Windows 10、Windows 11。 Windows 10 和 Windows 11 托管 Win32 平台 WebAuthn API。

  • 漫游验证器。 你可能会注意到,没有 Microsoft 漫游验证器。 这是因为已经有一个强大的产品生态系统,专用于强身份验证,每个客户 (公司或个人是否) 对安全性、易用性、分发和帐户恢复有不同的要求。 有关不断增加的 FIDO2 认证验证器列表的详细信息,请参阅 FIDO 认证产品。 该列表包括内置验证器、漫游验证器,甚至包括具有认证设计的芯片制造商。

开发人员参考

WebAuthn API 记录在 Microsoft/webauthn GitHub 存储库中。 若要了解 FIDO2 验证器的工作原理,请查看以下两个规范: