AWS CLI 中 Cognito User Pools 的 change-password 命令详解参数、模型与底层实现【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本文以 AWS CLI 仓库中的官方示例文档change-password.rst为主体围绕aws cognito-idp change-password命令展开先完整继承原示例的命令用法再结合仓库内 botocore 的 API 模型数据service-2.json逐一解析三个参数的必填性、取值约束与敏感标记并说明该示例文档是如何被 CLI 的帮助系统注入到aws help输出中的帮助读者既能直接复制命令完成当前登录用户改密操作也能理解命令背后 API 模型与文档机制的实现细节。命令示例更改当前登录用户的密码原始示例文档change-password.rst给出的核心内容只有一条命令其作用是更改当前已登录用户的密码——注意这里强调当前用户该操作由用户本人持有访问令牌发起而非管理员操作aws cognito-idp change-password --previous-password OldPassword --proposed-password NewPassword --access-token ACCESS_TOKEN命令中的三个占位值含义如下OldPassword用户当前的旧密码NewPassword用户在应用中被提示输入的新密码ACCESS_TOKENAmazon Cognito 颁发给要修改密码的那位用户的有效访问令牌access token。一个贴近实际使用的示例在 Linux/macOS shell 中aws cognito-idp change-password \ --previous-password OldPassword123! \ --proposed-password NewPassword456! \ --access-token eyJraWd... \ --output json实际执行中建议为密码值加引号避免特殊字符被 shell 解释--output json便于以结构化方式确认调用结果。API 模型视角命令参数从哪里来AWS CLI 并不是为每个服务硬编码参数而是由 botocore 从内置的 API 模型文件中动态生成。对于 cognito-idp 服务模型文件是 service-2.jsonAPI 版本 2016-04-18。ChangePassword操作在模型中的定义见 service-2.json包含以下关键信息模型属性值含义HTTP 方法与请求路径POST /请求统一 POST 到 cognito-idp 端点根路径输入结构ChangePasswordRequest对应--previous-password/--proposed-password/--access-token三个 CLI 参数输出结构ChangePasswordResponse空结构无返回字段认证方式authtype: nonenoAuth请求本身不走 IAM 签名改用用户访问令牌鉴权其中模型的documentation字段明确写道Changes the password for the currently signed-in user. Authorize this action with a signed-in users access token. It must include the scopeaws.cognito.signin.user.admin.——即访问令牌必须包含aws.cognito.signin.user.admin作用域。同时模型特别注明该操作不评估 IAM 策略不能使用 IAM 凭据发起请求也不存在可授予的 IAM 权限其授权模型完全依赖用户访问令牌。请求参数详解ChangePasswordRequest请求结构定义见 service-2.jsonrequired数组声明为[ProposedPassword, AccessToken]即CLI 参数模型成员必填说明--previous-passwordPreviousPassword否条件性用户当前密码。模型文档注明如果用户没有密码、仅使用无密码认证方式如社交登录登录则可以省略此参数--proposed-passwordProposedPassword是用户在新密码提示下输入的新密码--access-tokenAccessToken是Cognito 颁发给待改密用户的有效访问令牌两个密码参数均引用PasswordType见 service-2.json其约束为类型为字符串最长256字符正则约束[\S]即密码不能包含空白字符标记为sensitive: true属于敏感数据CLI 在帮助文档和日志场景下会对此类字段做特殊处理。响应结构ChangePasswordResponse是一个不含任何成员的空结构命令成功执行时通常没有任何 JSON 字段输出退出码为 0若返回了错误信息则是模型中声明的异常之一见下节。可能的错误模型声明的 13 种异常模型为ChangePassword显式声明了 13 种可能的异常见 service-2.json排障时可按此清单对照异常典型触发场景NotAuthorizedException访问令牌无效、过期或用户状态不允许该操作InvalidParameterException参数格式/取值不合法如密码含空白字符InvalidPasswordException新密码不符合用户池的密码策略PasswordHistoryPolicyViolationException新密码命中密码历史策略不能重复使用旧密码PasswordResetRequiredException该用户处于必须先重置密码状态如管理员创建用户后的强制首登改密此时应走forgot-password或admin-reset-user-password流程而非直接改密UserNotFoundException令牌对应的用户在池中不存在UserNotConfirmedException用户注册尚未完成确认邮箱/手机未验证ResourceNotFoundException相关资源如用户池不存在TooManyRequestsException请求频率过高被限流LimitExceededException超出服务配额OperationNotEnabledException该操作在用户池中未启用InternalErrorException服务端内部错误可重试ForbiddenException禁止执行需要特别区分的是PasswordResetRequiredException当管理员通过admin-create-user创建用户未指定初始密码后用户首次登录时 Cognito 会要求强制重置密码此时直接调用change-password会失败应先通过aws cognito-idp forgot-password完成重置再进行常规改密。与管理员改密操作的区分change-password属于用户自助操作API 前缀无admin-其入口条件是持有该用户自己的 access token。仓库的同一示例目录下还有两个容易混淆的管理员操作文档admin-set-user-password.rst管理员直接为用户设定密码使用 IAM 凭据 管理员权限参数为--user-pool-id/--username/--password可选--permanentadmin-reset-user-password.rst管理员触发用户密码重置使用户进入下次登录必须先改密状态。三者适用场景对比场景命令凭据要求用户本人改密已知旧密码change-password用户 access token含aws.cognito.signin.user.adminscope管理员替用户强制设密admin-set-user-passwordIAM 凭据 Cognito 管理员权限管理员触发用户重置密码admin-reset-user-passwordIAM 凭据 Cognito 管理员权限另外若用户在自助流程中忘记密码无法提供旧密码应使用 forgot-password.rst 对应的forgot-password流程而不是change-password。示例文档如何进入 CLI 帮助输出change-password.rst这类文件并非独立网页文档而是被 AWS CLI 的帮助系统动态注入到aws help/aws cognito-idp change-password help输出中的Examples章节。其机制在 addexamples.py 中实现该定制模块将add_examples函数注册到doc-examples.*.*文档事件上由 awscli/customizations/init.py 完成注册事件触发时函数按examples/服务名/操作名.rst的命名规则拼接路径见 addexamples.pycognito-idp 的change-password操作正好命中 change-password.rst若文件存在则在帮助文本中先写入 Examples 二级标题和一条注记提示需安装配置 AWS CLI、示例使用类 Unix 引用规则随后将 .rst 文件内容逐行写入文档见 addexamples.py。因此在仓库中直接阅读该 .rst 文件与在终端执行aws cognito-idp change-password help看到 Examples 章节的内容是一致的若想让帮助系统展示更多操作示例也是按照同样的examples/service/operation.rst命名约定添加内容文件即可此处仅说明机制仓库为只读不建议直接修改。使用前提与注意事项CLI 需已安装并完成凭据配置虽然change-password请求本身使用用户访问令牌鉴权模型中标记为 noAuth但 CLI 仍需要能定位 cognito-idp 端点通常意味着已配置默认 region 或显式指定--region若用户池部署在非默认区域建议通过--endpoint-url指向具体端点访问令牌的获取token 通常来自initiate-auth/respond-to-auth-challenge等认证流程的响应或经由 Cognito Identity Provider 端点user pool endpoint而非 IAM API 端点颁发密码约束新密码须满足用户池配置的密码策略长度、字符类别等且不能与密码历史策略冲突否则会收到InvalidPasswordException或PasswordHistoryPolicyViolationException密码不得含空白字符由模型中PasswordType的[\S]正则约束决定最长 256 字符成功时输出为空响应结构无字段命令成功仅体现为无错误、退出码 0综合来看该示例文档虽然只有一行命令但结合 service-2.json 中ChangePassword操作的完整模型定义可以确认其三个参数的必填性、敏感标记、HTTP 传输方式、令牌作用域要求以及完整的错误面——这正是 AWS CLI 数据驱动命令生成设计哲学的典型缩影仓库内一个 API 模型 JSON 文件同时决定了命令参数、帮助文本、序列化行为与错误类型。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考