使用AWS CLI添加Cognito用户时遇缺失密钥错误,寻求解决方案
解决Cognito SignUp报错:Client is configured for secret but secret was not received
问题原因
你创建的Cognito用户池应用客户端启用了客户端密钥,但调用sign-up命令时没有提供对应的密钥校验参数,因此触发权限错误。
两种解决方法
方法1:修改命令,添加--secret-hash参数
首先需要生成符合要求的secret-hash值——这是通过HMAC-SHA256算法,将用户名和客户端ID拼接后用客户端密钥加密得到的结果。
可以用以下Python代码生成:
import hmac import hashlib import base64 # 替换成你的实际值 client_id = "<你的CLIENTID>" client_secret = "<你的客户端密钥>" username = "randy@mydomain.com" message = username + client_id digest = hmac.new(client_secret.encode('utf-8'), msg=message.encode('utf-8'), digestmod=hashlib.sha256).digest() secret_hash = base64.b64encode(digest).decode() print(secret_hash)
把生成的secret_hash填入命令,修改后的完整命令如下:
aws cognito-idp sign-up \ --region us-east-1 \ --client-id <CLIENTID> \ --username randy@mydomain.com \ --password password \ --secret-hash <生成的SECRET_HASH>
方法2:禁用Cognito客户端的密钥校验
如果不需要客户端密钥,可以直接修改配置:
- 登录AWS控制台,进入你的Cognito用户池
- 切换到「应用集成」标签,找到当前使用的应用客户端
- 点击「编辑」,取消勾选「生成客户端密钥」选项
- 保存修改后,重新执行你原来的
sign-up命令即可
补充说明
你遇到的教程过时问题,大概率是因为当前Cognito创建应用客户端时默认启用了密钥校验,而旧教程使用的是无密钥的客户端配置,导致命令参数不匹配。
内容的提问来源于stack exchange,提问作者randy
相关产品推荐
相关产品推荐

