mcpField
A
aws-auth

aws-auth

github.com/aws安全3.3k4.6k 次安装1 天前更新
代码仓库

关于 aws-auth

使用 Amazon Cognito 和 Amplify 客户端身份验证库实现应用身份验证与授权的流程技能。它帮助开发者选择用户池或身份池,并配置登录、令牌、API 授权和安全,同时说明不涵盖 IAM 与后端实现。

主要功能

  1. 01选择用户池和身份池
  2. 02指导登录、OAuth 与 MFA
  3. 03涵盖令牌和会话控制
  4. 04配置 Cognito API 授权器
  5. 05提供安全与故障排查指引

适用场景

  1. 01为应用添加注册和登录
  2. 02配置社交登录或通行密钥
  3. 03使用 Cognito 令牌保护 API
  4. 04向客户端发放临时 AWS 凭证

MCP 相关

建议通过 AWS MCP 服务访问 Cognito 和 API Gateway API;也可使用 AWS CLI,不强制依赖 MCP。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aws/agent-toolkit-for-aws --skill aws-auth

安装后在 Claude Code 中输入/aws-auth确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-authorization.md
identity-pools.md
lambda-triggers.md
managed-login-oauth.md
passkeys.md
threat-protection.md
tokens-and-sessions.md
troubleshooting.md
user-pools.md

详细介绍

AWS 身份验证(Amazon Cognito)

使用 Amazon Cognito 和 Amplify 客户端身份验证库进行应用级用户身份验证与授权。需要精确核实限制、配额和 API 的确切形式时,请查阅 AWS 官方文档;若与记忆中的信息冲突,以文档为准。

推荐: AWS MCP 服务可便捷访问此技能使用的 AWS API(Cognito 用户池/应用客户端/身份池设置、API Gateway 授权方)。如果无法使用,文中展示的 AWS CLI 命令可直接使用——此技能并不强制依赖 MCP。

不适用场景: Amplify Gen2 后端代码(defineAuth、amplify/auth.ts、npx ampx);IAM 策略/角色/信任策略编写、STS 或 IAM Identity Center 控制台 SSO;API Gateway 路由/集成设置或 Lambda 函数实现(此技能只涵盖 Cognito/JWT 授权方配置以及 Cognito Lambda 触发器的用途)。

先选择用户池还是身份池

这两种服务并不相同,却经常被混淆。大多数应用需要用户池;只有在客户端必须直接调用 AWS 服务时,才添加身份池。

需求……使用原因
注册/登录、用户目录、颁发 JWT用户池它负责验证用户身份,也是一个 OIDC 身份提供方
让已登录的客户端使用 AWS 凭证直接调用 S3/DynamoDB 等服务身份池它通过 STS 将令牌换成临时 AWS 凭证
两者都需要(登录后从浏览器/应用访问 AWS 资源)用户池 → 身份池身份池信任用户池作为其身份提供方

如果你的应用只调用自己的后端/API,则不需要身份池——将用户池令牌发送给 API 即可。请参阅 identity-pools.md。

重要警告

update-user-pool-client 和 set-identity-pool-roles 会完全替换,而非部分更新:任何省略的字段都会重置为默认值——如果调用 update-user-pool-client 时只传入要更改的字段,就会在不发出提示的情况下清除 ExplicitAuthFlows、令牌有效期、EnableTokenRevocation、刷新令牌轮换以及读写属性;set-identity-pool-roles 也会替换整个角色及 RoleMappings 结构。务必先读取、修改,再写入:先调用 describe-user-pool-client(或 get-identity-pool-roles),然后重新发送所有现有字段及要做的更改。在 Agent 场景中,这种清除操作不会显现出来——调用会成功,直到用户遇到缺失的流程时才会出问题。参见 managed-login-oauth.md 和 identity-pools.md。

新应用不要使用隐式授权:隐式授权(response_type=token)已过时,会在 URL 片段中返回令牌。对于 SPA 和移动应用,请使用带 PKCE 的授权码授权(response_type=code + code_challenge)——面向公共客户端,无需客户端密钥。参见 managed-login-oauth.md。

高价值应用不要将刷新令牌存储在 localStorage 中:任何注入的脚本都能读取 localStorage(XSS)。Amplify 客户端库默认使用 localStorage;请改用 cookieStorage,缩短刷新令牌的有效期,并在应用客户端上启用刷新令牌轮换和令牌撤销。参见 tokens-and-sessions.md。

自定义访问令牌声明需要付费功能计划:在入门级计划(V1)上,预令牌生成触发器可以自定义 ID 令牌;但自定义访问令牌(V2/V3)需要付费功能计划——请查看 Cognito 功能计划文档,确认当前哪个计划包含此功能,因为计划名称及其包含的功能可能会变化。不要以为入门级计划支持访问令牌声明。参见 lambda-triggers.md。

应用客户端密钥 + SPA = 身份验证失效:公共客户端(浏览器/移动应用)不得设置客户端密钥。如果设置了密钥,令牌调用就必须发送 SECRET_HASH,否则会失败;而浏览器无法安全保护该密钥。只有机密客户端(服务端)才应生成密钥。

不要批量对 UNCONFIRMED 用户执行 admin-confirm-sign-up:用户卡在 UNCONFIRMED 状态时,优先使用 resend-confirmation-code,让每位用户通过 confirm-sign-up 重新验证并证明其拥有该邮箱(验证码可能已过期或被归入垃圾邮件)。admin-confirm-sign-up 会立即更改状态,但不会验证电子邮件——该属性仍处于未验证状态;如果邮箱用于密码重置或账户关联,这会很危险。仅对可信账户或迁移的账户使用此命令。参见 troubleshooting.md。

快速导航

您想要……前往
创建用户池、注册/登录、MFA、密码策略、应用客户端user-pools.md
添加托管式 UI / 托管登录、OAuth 流程、社交或 SAML 登录、回调 URL、自定义域名(us-east-1 中的 ACM)managed-login-oauth.md
处理 ID/访问/刷新令牌、轮换、撤销、会话终止(全局登出与撤销及禁用)tokens-and-sessions.md
为客户端提供临时 AWS 凭证、访客访问、角色映射identity-pools.md
使用 Cognito 令牌保护 API Gateway API(并在后端强制执行自定义声明)api-authorization.md
在 Application Load Balancer (ALB authenticate-cognito) 前添加 Cognito 登录api-authorization.md
机器对机器(客户端凭证)身份验证、资源服务器、自定义作用域managed-login-oauth.md
创建用户池组并将用户添加到组中(cognito:groups、Precedence)user-pools.md
自定义声明、自定义身份验证质询流程、迁移用户、验证注册lambda-triggers.md
添加 通行密钥 / WebAuthn 登录(USER_AUTH 流程、AllowedFirstAuthFactors、WebAuthn 注册)passkeys.md
配置 威胁防护——阻止已泄露凭证、自适应身份验证(基于风险的 MFA)、将日志发送到 CloudWatchthreat-protection.md
遇到问题(重定向、令牌、MFA、CORS、社交登录)troubleshooting.md

常见工作流

“为我的 React 应用添加注册和登录” → 创建用户池和一个公共应用客户端(无密钥),启用托管式 UI / 托管登录,并使用带 PKCE 的授权码授权,接入 Amplify 客户端库。请参阅 user-pools.md 和 managed-login-oauth.md。

“添加 Google / 社交登录” → 在用户池中注册社交 IdP,映射属性,并将提供商添加到应用客户端和托管式 UI。请参阅 managed-login-oauth.md。

“只有经过身份验证的用户才能调用我的 API” → HTTP API → JWT 授权方;REST API → Cognito 用户池授权方。请参阅 api-authorization.md。

“让浏览器在登录后上传到 S3” → 使用用户池进行登录,然后使用身份池提供受限范围的临时凭证。请参阅 identity-pools.md。

故障排查

错误/症状可能原因快速修复
登录后出现 redirect_mismatch / 重定向到错误的 URL未注册回调 URL,或协议、尾部斜杠、大小写不一致将准确的回调 URL(包括协议和路径)添加到应用客户端的 Allowed callback URLs 中
Token 调用失败,并提示“unable to verify secret hash”在公共客户端(SPA/移动端)上设置了客户端密钥重新创建不含密钥的应用客户端,或从机密客户端发送 SECRET_HASH
使用有效 Token 时,用户从 API Gateway 收到 401Token 类型错误,或受众/颁发者不匹配HTTP JWT 授权方:颁发者为 https://cognito-idp.{region}.amazonaws.com/{userPoolId},受众 = 应用客户端 ID;发送授权方所需的 Token
调用托管 UI / Token 端点时出现 CORS 错误浏览器跨域调用 /oauth2/token,或 API 缺少 CORS 配置使用 PKCE 执行代码交换;不要从浏览器代理 Token 端点
社交登录用户提示“already exists” / 属性冲突不同提供商使用相同邮箱会创建独立用户启用属性映射和账户关联;不要将邮箱视为跨 IdP 唯一

完整表格见 troubleshooting.md。

安全注意事项

  • 公共客户端(SPA/移动端):不要设置客户端密钥,使用带 PKCE 的授权码授权,并请求最小权限范围。
  • 启用 MFA(TOTP 或 SMS)、强密码策略,以及可用时的高级安全 / 威胁防护。
  • 缩短访问 Token 的有效期;启用刷新 Token 轮换和 Token 撤销;优先使用 cookieStorage,而非 localStorage。
  • 身份池:严格限制已认证 IAM 角色的权限;除非确有需要,否则禁用未认证(访客)访问。
  • 每次受保护请求都要根据用户池 JWKS 验证 JWT(iss、aud/client_id、token_use、exp)。使用 aws-jwt-verify 等维护良好的库,而不是自行编写验证逻辑。
  • 为应用网页设置安全标头:Content-Security-Policy(限制脚本来源以缓解窃取 Token 的 XSS)、Strict-Transport-Security(HSTS)、X-Frame-Options/frame-ancestors(防止登录页面遭受点击劫持),以及 X-Content-Type-Options: nosniff。
  • 启用日志记录和监控:使用 CloudTrail 记录 Cognito API 事件(注册/登录/管理),启用用户池威胁防护(自适应身份验证和事件日志记录),针对身份验证失败/限流设置 CloudWatch 警报,并启用 API Gateway 访问日志以记录授权方的决策。
  • 所有 Cognito 和 API 端点都只能使用 HTTPS/TLS;在 CloudWatch 日志组、用于 MFA/通知的 SNS 主题,以及由身份池支持的任何上传存储桶上,启用静态加密并使用客户管理的 KMS 密钥(同时限制密钥访问权限)。
  • 如果使用 SNS 发送 MFA/通知,请为主题启用服务器端加密(KMS),并确保 SMS/电子邮件消息内容仅包含收件人所需的信息——不要包含超出消息需要范围的个人身份信息。
  • 参考资料:Amazon Cognito 安全功能(用户池)、Amazon Cognito 安全性(顶层文档,包括身份池)和 IAM/STS 最佳实践。

本技能未涵盖内容时的查阅指南

如果需要了解本技能未涵盖的详细信息——例如确切的参数结构、当前限制和边缘行为——请查阅权威的 AWS 资料,而不要猜测。指引比内容更新得慢得多,因此即使本技能不再扩展,这份指南仍然有用。

本技能未涵盖的内容

  • Amplify Gen2 后端(defineAuth、amplify/auth.ts、npx ampx sandbox)。
  • IAM 策略 / 角色 / 信任策略编写、STS、IAM Identity Center 控制台 SSO。
  • API Gateway 路由 / 集成设置和 Lambda 函数实现(本技能仅涵盖 Cognito/JWT 授权器配置,以及 Cognito Lambda 触发器的用途)。

评论

支持 Markdown