用途
Amazon Cognito 为 Web 和移动应用提供身份认证、授权和用户管理能力。用户既可以直接登录,也可以通过联合身份提供商登录。本技能文档围绕 Cognito 的核心概念、常见操作模式、CLI 命令、最佳实践和故障排查展开,适合在搭建用户池、配置身份池、实现 OAuth 流程和管理用户时参考。
核心概念
用户池(User Pools)
用户池是用于注册和登录的用户目录,提供:
- 用户注册与身份认证
- OAuth 2.0 / OpenID Connect 令牌
- MFA 与密码策略
- 可自定义的 UI 和流程
身份池(Identity Pools / Federated Identities)
身份池用于提供访问 AWS 服务的临时 AWS 凭证。用户来源可以是:
- Cognito 用户池用户
- 社交身份(Google、Facebook、Apple)
- SAML/OIDC 企业身份
- 匿名访客
令牌(Tokens)
| 令牌 | 用途 | 有效期 |
|---|---|---|
| ID Token | 用户身份声明 | 1 小时 |
| Access Token | API 授权 | 1 小时 |
| Refresh Token | 获取新的 ID/Access 令牌 | 30 天(可配置) |
主要能力与常见模式
文档给出了以下常见操作模式,并附有 AWS CLI 或 Python(boto3)示例代码:
- 创建用户池(create-user-pool),可配置密码策略、自动验证属性、MFA 等
- 创建应用客户端(create-user-pool-client),配置认证流程、回调 URL、OAuth 范围、令牌有效期
- 用户注册(sign_up)与确认注册(confirm_sign_up)
- 用户认证(initiate_auth / admin_initiate_auth),支持 USER_SRP_AUTH 和 ADMIN_USER_PASSWORD_AUTH 等流程
- 刷新令牌(REFRESH_TOKEN_AUTH)
- 创建身份池(create-identity-pool)
- 获取 AWS 凭证(get_id、get_credentials_for_identity)
使用方式
文档提供 AWS CLI 命令参考,按类别组织:
- 用户池:create-user-pool、describe-user-pool、update-user-pool、delete-user-pool、list-user-pools
- 用户:admin-create-user、admin-delete-user、admin-get-user、list-users、admin-set-user-password、admin-disable-user
- 认证:initiate-auth、respond-to-auth-challenge、admin-initiate-auth
同时提供 Python 代码示例,包括使用 HMAC-SHA256 生成 SecretHash、调用 boto3 的 cognito-idp 和 cognito-identity 客户端完成注册、确认、认证、刷新令牌和获取临时凭证等操作。
适用场景
- 为 Web 或移动应用添加用户注册、登录和会话管理
- 通过 OAuth 2.0 / OpenID Connect 集成第三方登录
- 为已认证用户或匿名访客发放临时 AWS 凭证以访问 AWS 资源
- 在 API Gateway 等场景中使用 Access Token 进行授权
- 需要 MFA、密码策略、邮箱/手机验证等安全能力的应用
最佳实践
文档从三个角度给出建议:
- 安全:为所有用户启用 MFA(至少可选)、使用强密码策略、启用高级安全功能(自适应认证)、在允许登录前验证邮箱/手机、对敏感应用使用较短令牌有效期、切勿在前端代码中暴露客户端密钥
- 用户体验:使用托管 UI 快速实现、用 CSS 自定义 UI、实现完善的错误处理、提供清晰的密码要求
- 架构:使用身份池访问 AWS 资源、使用 Access Token 用于 API Gateway、安全存储 Refresh Token、在过期前实现令牌刷新
限制与故障排查
文档列出常见问题及排查方向:
- 用户无法登录:可能原因包括用户未确认、密码错误、用户被禁用、账户因尝试次数过多被锁定;可用 admin-get-user 调试
- 令牌验证失败:可能原因包括令牌过期、用户池/客户端 ID 错误、令牌签名无效;文档给出使用 JWKS 和 python-jose 验证 JWT 的示例
- 托管 UI 不工作:需检查回调 URL、用户池域名、OAuth 设置
- 速率限制:出现 TooManyRequestsException 时可实现指数退避、申请提高配额、合理缓存令牌
文档末尾列出参考资源:Cognito 开发者指南、Cognito 用户池 API、Cognito 身份 API、Cognito CLI 参考。
关于具体收费、价格、平台支持范围等信息,资料中暂未提供。