Amazon Cognito
为 Web 和移动应用添加用户认证与授权功能的全托管服务,支持社交登录和 SAML 集成
概述
Amazon Cognito 是一项全托管服务,用于为应用添加用户注册、登录和访问控制功能。用户池作为用户目录,支持邮箱密码认证、MFA、密码策略设置和自定义认证流程。支持 Google、Facebook、Apple、Amazon 等社交身份提供商以及 SAML 2.0、OpenID Connect 企业身份提供商集成。身份池为已认证用户授予临时 AWS 凭证,实现对 S3 和 DynamoDB 等 AWS 资源的直接访问。月活跃用户(MAU)50,000 人以内免费,小型应用可实质免费使用。
用户池与身份池的职责分离
理解 Cognito 设计的出发点是明确区分用户池(认证)和身份池(授权)的职责。用户池作为用户目录,负责注册、登录、密码重置、MFA 和邮件/短信验证。认证成功后发放 JWT(JSON Web Token),可用于 API Gateway 或 ALB 的请求认证。身份池为已认证用户基于 IAM 角色授予临时 AWS 凭证,使前端应用可直接上传到 S3 存储桶或访问 DynamoDB 表。Azure AD B2C 作为单一服务通过用户流和自定义策略定义认证流程,而 Cognito 通过组合这两个组件,可分阶段构建从认证到资源访问控制的完整方案。
通过 Lambda 触发器自定义认证流程
Cognito 的认证流程可通过 Lambda 触发器在各阶段进行自定义。Pre Sign-up 触发器可在注册前执行验证(如仅允许特定域名邮箱),Post Confirmation 触发器可在注册完成后创建 DynamoDB 用户记录或发送欢迎邮件。使用 Pre Token Generation 触发器可向 JWT 添加自定义声明(用户所属组织或角色等),用于 API 端的精细访问控制。社交登录(Google、Apple、Facebook)和 SAML/OIDC 联合身份验证标准支持,可顺畅集成企业现有身份提供商。用户认证专业书籍(Amazon)详细讲解了 Lambda 触发器的实现模式。
安全功能与防止未授权访问
启用 Cognito 的高级安全功能后,可使用异常登录检测、基于风险的自适应认证和泄露凭证检测。自适应认证分析用户的设备、IP 地址和地理位置等上下文信息,检测到异常模式时要求额外认证(MFA)。例如通常从东京登录的用户突然从海外 IP 访问时,会自动触发 MFA 挑战。密码策略可设置最小长度、大小写字母、数字和特殊字符要求,还会与泄露密码数据库进行比对。MAU 50,000 人以内免费,之后每 MAU 0.0055 美元,作为面向消费者的认证服务具有较高的成本效益。