SuperAPI AI 工具集

cognito

安全与审计

查看项目

更新于 10-15 12:07

技能介绍

用途

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 参考。

关于具体收费、价格、平台支持范围等信息,资料中暂未提供。