概念
对应的官方页面地址
[译者注]:CATP:Client to Authenticator Protocol(客户端到验证器协议)
FIDO2
FIDO2 是万维网联盟 (W3C) 关于网络身份验证 (WebAuthn) 和客户端到验证器协议 (CTAP) 的标准规范。制定 FIDO 身份验证标准是为了提供比标准密码和 SMS 2FA 更安全的身份验证。使用 FIDO 身份验证标准可以提供一种安全的体验,让消费者更容易使用,让开发人员更容易实施。有关 FIDO 的更多信息,请访问 FIDO Alliance。
FIDO2 由 WebAuthn 和 CTAP 两个标准化组件组成。这些标准的共同作用是创造一种安全的无密码体验。
WebAuthn - 是一种应用程序接口 (API),可将依赖方连接到应用程序或登录系统。从实际意义上讲,WebAuthn 在网络和应用程序之间建立了一种简便的连接,允许进行无密码身份验证。点击此处了解有关 WebAuthn 的更多信息。
CTAP2 - 客户端到验证器协议组件允许外部和便携式验证器(安全钥匙)与客户端平台一起运行。FIDO CTAP2 负责外部因素(如安全钥匙),通过验证器与网站或账户进行通信。
为了符合 FIDO2 标准,Passwordless.dev 身份验证过程将同时采用 WebAuthn 和 CTAP2 标准。
通行密钥
通行密钥 (Passkey) 是密码的替代品,可以让用户在不同设备上更快、更方便、更安全地登录网站和应用程序。更确切地说,「通行密匙」是一个对消费者友好的术语,指的是一种可被发现的 FIDO 凭证,它可以通过同步实现跨设备的安全无密码登录,也可以作为设备绑定的通行密钥专用于单个硬件。
当与设备绑定时,通行密钥还可以提供升级的认证功能。
可发现凭据
可发现凭证是可用于身份验证的通行密钥,服务器不需要先输入 credentialId
。这意味着您无需首先使用用户名或电子邮件来识别用户,从而使登录变得更加简单。通行密钥是可发现凭证的一个示例。
用户标识符
FIDO2 规范定义了多个用户标识符,Passwordless.dev 可以在各种注册和登录操作中使用这些标识符:
userId - 代表 WebAuthn 用户句柄的唯一字符串。该值不会显示给用户,也不应包含个人身份信息。身份验证尝试只能根据
userId
值进行。userId
的一个示例是数据库主键,例如 int(整数)123
或 guida2bd8bf7-2145-4a5a-910f-8fdc9ef421d3
。用户名 - (仅用于显示目的)是用户账户的人性化标识符。它仅用于显示,即帮助用户区分显示名称相似的用户账户。在浏览器 UI 中使用,从不存储在数据库中。例如
pjfry@passwordless.dev
显示名称 - (仅用于显示目的)是账户的人性化名称,应由用户选择,仅在应用程序的 UI 中使用。例如
Philip J. Fry
别名 - 是面向用户的对
userId
的引用,允许使用其他用户名、电子邮件地址等登录。默认情况下,别名在存储之前会进行哈希处理,以保护用户隐私。可以通过向/alias
端点发出请求来为userId
设置多个别名(了解更多),但是在允许用户创建别名时应考虑以下规则:别名对于指定的
userId
必须是唯一的。别名长度不得超过 250 个字符。
一个
userId
最多可以有 10 个与其关联的别名。
身份验证器类型
FIDO2 身份验证器有两种类型:
平台身份验证器是设备驻留的身份验证器,例如 macOS 的 FaceID 或 TouchID、或 Windows Hello,无法通过 USB 或 NFC 等协议进行访问。
漫游身份验证器(也称为「跨平台」)是可拆卸的、与设备无关的身份验证器,例如 USB 安全钥匙,可通过 USB 或 NFC 等支持的传输协议连接到多个设备。
Passwordless.dev
产品组件
从架构上来说,Passwordless.dev 由三个关键部分组成:
一个开源的客户端库,由您的前端使用它来向最终用户浏览器的 WebAuthn API 发出请求以及向 Passwordless.dev API 发出请求。
一个公共 RESTful API,由您的前端使用它来完成与浏览器的 FIDO2 WebAuthn 加密交换。
一个私有 RESTful API,由您的后端使用它来发起密钥注册、验证登录以及为最终用户检索密钥。
API 密钥
使用 Passwordless.dev 管理控制台注册应用程序将创建一组 API 密钥:
ApiKey:一种公共 API 密钥,安全且被包含在客户端侧。它允许浏览器连接到我们的后端并发起密钥协商和断言。公共 API 密钥的格式为:
ApiSecret:一种私有 API 密钥或私有机密,应受到妥善保护。它允许您的后端代表您的用户验证登录和注册密钥。私有 API 机密的格式为:
凭据
凭据代表了由 Passwordless.dev 为用户注册的 FIDO2 身份验证器。凭凭据示例包括通行密钥和硬件安全钥匙。每个凭据都存储了以下信息:
令牌
在正常业务过程中,Passwordless.dev 使用两种重要类型的临时令牌:
注册令牌,由私有 API 通过请求
/register/token
端点创建(了解更多)。您的前端将在最终用户的设备上注册此令牌,以便在登录操作中使用。身份验证令牌,由公共 API 通过调用
.signin()
方法创建(了解更多)。您的后端将验证此令牌以完成登录操作(通过/signin/verify
端点)。
此外,Passwordless.dev 还使用其他类型的令牌用于特殊目的:
手动生成的身份验证令牌,由私有 API 通过对
/signin/generate-token
端点的请求创建。该令牌的权重与常规身份验证令牌相同,但它是手动生成的,绕过了常规身份验证流程。它主要用于方便账户恢复和通过魔法链接登录。。
更多
依赖方
依赖方 (RP) 是处理资源访问请求的服务器。网络应用程序在访问请求期间验证用户凭据就是一个 RP 的例子。
依赖方 ID
依赖方 ID 提供与给定域相对应的技术平台和标识。
用户验证
FIDO2 服务器 RP(依赖方)与身份验证器交互,以验证用户。这可以通过 PIN 码、生物识别或其他 2FA 方法来完成,这些方法可以安全地验证访问账户的人是否正确。
最后更新于