目录
5.3 Java + AWS Lambda 的 WebAuthn 项目结构模板
5.5.7 AWS Lambda + API Gateway 示例 Handler
针对 Java 技术栈 + AWS 无服务器架构(Serverless) 实现 WebAuthn 身份认证的选型与架构设计指南,适合用于高安全性、可扩展且便于部署的企业级系统或 SaaS 平台。
一、技术选型总览
模块 | 推荐技术/服务 | 理由与说明 |
后端语言 | Java (>=11) + Spring Boot | 主流稳定,生态丰富 |
WebAuthn SDK | Yubico Java WebAuthn Server | 官方支持,稳定成熟,适合 Java 接入 |
Serverless 计算 | AWS Lambda | 自动弹性伸缩,按调用计费 |
身份存储 | Amazon DynamoDB 或 Amazon Aurora Serverless | Serverless 原生,支持自动扩容 |
身份认证框架 | Amazon Cognito(辅助)或自建 OAuth2 + JWT | Cognito 可作为身份池,也可搭配 Spring Security |
前端框架 | React + navigator.credentials API | 全面支持 WebAuthn 标准 |
二、系统架构图概览
[用户浏览器] --WebAuthn API--> [API Gateway] --> [Lambda(Java)] --> [DynamoDB/Aurora]
↑ ↓
[Authenticator (TouchID, YubiKey)] 公钥/凭证存储 & 校验
三、Lambda 接入 WebAuthn 模块建议结构
src/
├── auth/
│ ├── WebAuthnRegistrationHandler.java
│ ├── WebAuthnAuthenticationHandler.java
│ └── WebAuthnService.java ← 使用 Yubico Java WebAuthn Server SDK 封装
├── model/
│ ├── UserCredential.java ← 存储 credentialId, publicKey, signCount
├── util/
│ ├── ChallengeGenerator.java
│ └── Base64Util.java
└── storage/
├── DynamoDBCredentialRepository.java
四、注册 & 登录流程(Lambda 实现)
4.1 注册阶段(Registration)
(1)前端请求 /webauthn/register/challenge
-
Lambda 返回
PublicKeyCredentialCreationOptions
(2)浏览器调用 navigator.credentials.create()
(3)前端将凭证发送到 /webauthn/register/response
-
Lambda 使用 Yubico SDK 验证 attestation
-
存储
credentialId
,publicKey
,signCount
到数据库
4.2 登录阶段(Authentication)
(1)前端请求 /webauthn/login/challenge
-
Lambda 返回
PublicKeyCredentialRequestOptions
(2)浏览器调用 navigator.credentials.get()
(3)前端将结果发送到 /webauthn/login/response
-
Lambda 使用 SDK 验证签名 + signCount
-
通过验证后生成 JWT 并返回
五、AWS 部署建议
5.1 AWS部署服务
服务 | 配置建议 |
API Gateway | 配置 REST API 或 HTTP API,设置 CORS,启用 JWT 校验 |
Lambda | 每个端点一个函数,或使用 Spring Cloud Function 打包单函数 |
存储 | 用户数据可存 DynamoDB(key-value 快速访问),Aurora 更强关系型 |
安全性 | 建议启用 WAF + CloudWatch 日志监控 WebAuthn 攻击行为 |
CI/CD | 推荐用 AWS SAM 或 Serverless Framework 部署全流程 |