用途:AWS Cognito 为 Web 和移动应用提供认证、授权与用户管理能力,用户可直接登录,也可通过联邦身份提供商登录。
主要能力:用户池(User Pools)作为注册与登录的用户目录,提供用户注册与认证、OAuth 2.0 / OpenID Connect 令牌、MFA 与密码策略、可定制 UI 与流程;身份池(Identity Pools,即 Federated Identities)为访问 AWS 服务提供临时凭证,支持用户池用户、社交身份(Google、Facebook、Apple)、SAML/OIDC 企业身份和匿名访客。令牌分三类:ID Token 承载用户身份声明,有效期 1 小时;Access Token 用于 API 授权,有效期 1 小时;Refresh Token 用于获取新的 ID/Access Token,有效期 30 天(可配置)。
使用方式:通过 AWS CLI 创建用户池,例如:aws cognito-idp create-user-pool --pool-name my-app-users --policies '{"PasswordPolicy": {"MinimumLength": 12, "RequireUppercase": true, "RequireLowercase": true, "RequireNumbers": true, "RequireSymbols": true}}' --auto-verified-attributes email --username-attributes email --mfa-configuration OPTIONAL。创建应用客户端使用 aws cognito-idp create-user-pool-client。身份池使用 aws cognito-identity create-identity-pool 创建,并通过 get_id、get_credentials_for_identity 获取临时 AWS 凭证。SDK 侧(如 boto3)可执行 sign_up、confirm_sign_up、initiate_auth、admin_initiate_auth、REFRESH_TOKEN_AUTH 等操作,其中带客户端密钥时需计算 SecretHash。CLI 还提供用户管理命令,如 admin-create-user、admin-get-user、list-users、admin-set-user-password、admin-disable-user。
最佳实践:为所有用户启用 MFA(至少可选)、使用强密码策略、启用高级安全功能(自适应认证)、在允许登录前验证邮箱/手机、敏感应用使用较短令牌有效期、绝不在前端代码暴露客户端密钥;使用托管 UI 快速实现并用 CSS 自定义、实现完善的错误处理;用身份池访问 AWS 资源、用 Access Token 对接 API Gateway、安全存储 Refresh Token 并在过期前刷新。
限制与排错:用户无法登录时,可能原因包括用户未确认、密码错误、用户被禁用或账户锁定,可用 admin-get-user 排查;令牌验证失败可能因过期、用户池/客户端 ID 错误或签名无效,可获取 JWKS 并用 RS256 校验;托管 UI 不工作需检查回调 URL、域名与 OAuth 设置;遇到 TooManyRequestsException 可实现指数退避、申请配额提升或合理缓存令牌。