WebAuthn 服务器

· 功能

sgcWebSockets 2025.4.0 Enterprise 开始,支持 WebAuthn 协议(目前处于 BETA 阶段)。 

WebAuthn(Web 身份验证)是由万维网联盟(W3C)和 FIDO 联盟开发的 Web 标准,旨在实现网络上安全的无密码身份验证。它是更广泛的 FIDO2 框架的一部分,旨在减少对传统密码的依赖,而传统密码通常容易受到钓鱼、凭据填充和其他攻击的影响。

WebAuthn 的核心是允许用户使用公钥密码学进行身份验证。用户不再使用用户名和密码,而是向 Web 应用程序(信赖方)注册唯一的公私钥对。私钥安全地存储在认证器上(如硬件安全密钥、智能手机或内置生物识别设备),而公钥存储在服务器上。

在身份验证期间,服务器发出必须由用户私钥签名的挑战。签名的挑战被返回并使用存储的公钥验证,确保响应的完整性和来源。这种方法防止凭据被拦截或重复使用。

WebAuthn 支持多种认证器和设备,使开发人员和用户都具有灵活性。结合 PIN 或生物识别等其他因素时,它还可以实现多因素身份验证(MFA),在不牺牲可用性的情况下显著提高安全性。

支持的认证格式

不同的认证格式定义了这些数据的结构和验证方式。三种常用格式是 android-key、packed 和其他格式,如 fido-u2f、apple 或 none。默认情况下,所有认证格式都已启用,以下是支持的认证格式列表:


WebAuthn 流程


WebAuthn 服务器组件

TsgcWSAPIServer_WebAuthn 组件提供了一个简单但强大的解决方案来实现 WebAuthn 信赖方服务器,在您的 Web 应用程序中启用无密码身份验证。WebAuthn 应用程序由处理服务器端注册和身份验证的 WebAuthn 服务器以及通常是 JavaScript 应用程序的客户端应用程序组成。


以下是 WebAuthn 服务器的简单配置:


  // ... 创建服务器
  HTTPServer := TsgcWebSocketHTTPServer.Create(nil);
  WebAuthnServer := TsgcWSAPIServer_WebAuthn.Create(nil);
  WebAuthnServer.Server := HTTPServer;
  // ... 启用测试模式
  WebAuthnServer.EndpointsOptions.Test.Enabled := True;
  // ... WebAuthn 选项
  WebAuthnServer.WebAuthnOptions.RelyingParty := 'localhost';
  // ... 绑定
  Server.Port := 443;
  HTTPServer.SSLOptions.Port := 443;
  HTTPServer.Bindings.Clear;
  With HTTPServer.Bindings.Add do
  begin
    Port := 443;
    IP := '127.0.0.1';
  end;
  HTTPServer.SSLOptions.Certificate := 'sgc.pem';
  HTTPServer.SSLOptions.KeyFile := 'sgc.pem';  
  HTTPServer.SSL := True;
  // ... 激活
  HTTPServer.Active := True; 

Delphi WebAuthn 服务器演示

以下 Delphi WebAuthn 演示展示了如何注册新凭据并在之后用于对用户进行身份验证。