使用 Amazon Cognito 实现用户认证 - User Pool 与 Identity Pool 的设计
详解 Cognito User Pool 的用户认证、Identity Pool 的 AWS 资源访问以及社交登录的集成。
Cognito 概述
Cognito 是为 Web 和移动应用程序提供认证、授权和用户管理的服务,前 50,000 MAU(月活跃用户)免费。User Pool 是用户目录,管理注册、登录和 MFA。Identity Pool 向已认证用户发放临时 AWS 凭证,实现对 AWS 资源的直接访问。标准支持社交登录(Google、Facebook、Apple、Amazon)和 SAML/OIDC 联合,仅需几行配置即可完成与外部 IdP 的集成。
User Pool 与 Identity Pool 的区分使用
User Pool 发放 JWT 令牌(ID 令牌、访问令牌,有效期可设置为 5 分钟至 1 天),通过 API Gateway 的授权器进行验证。Identity Pool 接收 User Pool 的令牌,返回基于 IAM 角色的临时 AWS 凭证。从前端向 S3 上传文件时,使用 Identity Pool 获取的凭证直接调用 S3 SDK。可通过 Lambda 触发器实现:Pre Sign-up 限制邮箱域名、Post Confirmation 发送欢迎邮件、Pre Token Generation 添加自定义声明。两者的区分原则很明确:仅需后端 API 认证时 User Pool 的 JWT 即可,客户端需直接调用 AWS 资源(S3、DynamoDB、AppSync)时则需要并用 Identity Pool。
高级认证功能
Cognito 的高级安全功能提供自适应认证,根据风险级别(设备、IP 地址、登录历史)动态判断是否要求 MFA。来自常用设备的登录跳过 MFA,来自未知设备或异常 IP 的访问则强制 MFA。可使用自定义认证流程通过 Lambda 触发器实现 CAPTCHA 验证或自定义 MFA。用户池的托管 UI 提供可自定义的登录页面,可应用自有品牌。通过令牌自定义,可在 ID 令牌中添加自定义声明,用于应用程序端的授权判断。 要进一步深入了解 Cognito,可参考Amazon 的专业书籍。
设计最佳实践与陷阱
采用 Cognito 时容易遇到的三个陷阱。第一,User Pool 有创建后无法更改的属性(用户名格式、必填属性),因此需在设计阶段慎重决定 Schema。若后续要改为「以邮箱作为用户名」,则需重建 User Pool 并迁移用户。第二,忘记配置自定义域名会导致 Cognito 发出默认 URL(amazoncognito.com),从防钓鱼角度可能引起用户不信任。建议结合 ACM 证书配置自定义域名。第三,注意 Lambda 触发器的超时时间(默认 3 秒)。如果 Pre Token Generation 调用外部 API 且延迟超限,令牌发放失败,用户将无法登录。外部调用应加入缓存层,并以超时感知的方式设计。
与 Auth0 / Firebase Authentication 的比较
Cognito 的竞品包括 Auth0 和 Firebase Authentication。Auth0 在管理控制台易用性和文档完善度方面表现优异,提供丰富的复杂认证流程预设(基于 Organization 的多租户、升级认证),但大规模下每 MAU 单价可达 Cognito 的数倍。Firebase Authentication 与 Google 生态系统(Firestore、Cloud Functions)自然集成,但在以 AWS 为中心的架构中需要额外实现 IAM 角色的集成。Cognito 最大的优势是与 AWS 服务的原生集成(API Gateway 授权器、Identity Pool 的 IAM 角色映射、与 AppSync 的直接连接),在构建以 AWS 为中心的后端时摩擦最小。不过,Cognito 的托管 UI 自定义灵活性和管理控制台 UX 不如 Auth0,重视认证界面自由度时可考虑使用 Amplify UI 组件。
Cognito 的费用
Cognito 按月活跃用户(MAU)数计费。前 10,000 MAU 免费,50,000 MAU 以内每 MAU 约 0.0055 美元。SAML/OIDC 联合用户每 MAU 约 0.015 美元。高级安全功能(自适应认证、泄露凭证检测)需额外付费,每 MAU 约 0.050 美元。Identity Pool 的 AWS 凭证发放免费。由于按 MAU 计费,已注册但未登录的用户不影响成本。
总结
Cognito 是通过 User Pool 提供用户认证、通过 Identity Pool 提供 AWS 资源访问的服务。通过社交登录和 SAML/OIDC 联合与外部 IdP 集成,自适应认证动态应用基于风险的 MFA。与 AWS 服务的原生集成是其最大优势,在初期阶段慎重设计 User Pool 的 Schema 是长期运营的关键。