深入解析 sgcWebSockets WebAuthn 服务器

· 组件

TsgcWSAPIServer_WebAuthn 组件是一个 Delphi/FPC 服务器模块,通过 HTTPS 实现 WebAuthn 协议的依赖方。它与 TsgcWebSocketHTTPServerTsgcWebSocketServer 集成,并公开类 REST 的端点用于注册和身份验证。

端点机制

默认情况下,组件在 /sgcWebAuthn 下注册路由:

用途默认端点描述
注册选项/Registration/Options客户端在调用 navigator.credentials.create 之前请求挑战和依赖方信息
注册验证/Registration/Verify浏览器提交新凭据、认证对象和客户端数据以进行服务器验证
身份验证选项/Authentication/Options服务器提供允许的凭据 ID 列表和挑战
身份验证验证/Authentication/Verify浏览器提交断言(authenticatorData + 签名)以进行验证
JavaScript 辅助脚本/Webauthn提供封装标准 WebAuthn 浏览器调用的辅助脚本
测试页面/Test用于开发阶段测试 API 的快速 HTML 页面


端点可以通过 EndpointOptions 重新映射以适应现有路由方案。

核心属性

  1. RelyingParty(RPID / RPName) — 必填的 DNS 名称,用于标识凭据的逻辑域。确保其与应用程序的有效域名匹配。
  2. Origins 与 TopOrigins — 分号分隔的有效来源列表。Origins 涵盖主要域名;TopOrigins 用于在 iframe 中嵌入时的场景。
  3. AllowCrossOrigins — 如果设为 True,跨域 iframe 可以请求身份验证。这需要仔细维护 TopOrigins 并进行服务器端验证。
  4. Algorithms — 支持的 COSE 算法标识符(例如 ES256RS256EdDSA)。控制服务器接受哪些类型的公钥。
  5. TimeoutMS — 向客户端建议的完成 WebAuthn 操作的超时时间。
  6. UserVerification — 用户验证策略(preferredrequireddiscouraged)。
  7. Attestation — 指定认证方式:无、间接或直接。直接认证需要验证认证证书链。
  8. 元数据服务(MDS) — 启用后,组件将查询 FIDO 元数据服务文件以确认验证器型号的可信度。相关字段:
    • MDS_FileName — 本地缓存的 JSON 元数据(从 FIDO 下载)。
    • RootCert_FileName — 用于验证元数据签名的根证书。
  9. ChallengeOptions — 允许自定义生成挑战的长度和随机性来源。
  10. CredentialStorage — 虽然不是直接属性,但组件要求应用程序持久化凭据公钥、签名计数器和用户句柄。

事件生命周期

注册

身份验证

这些事件允许对协议的每个步骤进行精细控制,从生成选项到处理断言。